{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,8 +1,8 @@\n-Zip file size: 180993 bytes, number of entries: 65\n+Zip file size: 180722 bytes, number of entries: 65\n -rw-r--r--  2.0 unx       64 b- defN 21-Jul-23 13:13 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 META-INF/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/jansi/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/jansi/internal/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/jansi/io/\n@@ -24,44 +24,44 @@\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Mac/x86_64/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Windows/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Windows/x86/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Windows/x86_64/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 META-INF/maven/org.fusesource.jansi/\n drwxr-xr-x  2.0 unx        0 b- stor 21-Jul-23 13:13 META-INF/maven/org.fusesource.jansi/jansi/\n--rw-r--r--  2.0 unx    24135 b- defN 21-Jul-23 13:13 org/fusesource/jansi/Ansi.java\n--rw-r--r--  2.0 unx     1029 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiColors.java\n--rw-r--r--  2.0 unx    21903 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiConsole.java\n--rw-r--r--  2.0 unx    12057 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiMain.java\n--rw-r--r--  2.0 unx     1112 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiMode.java\n--rw-r--r--  2.0 unx     2809 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiPrintStream.java\n--rw-r--r--  2.0 unx     7606 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiRenderer.java\n--rw-r--r--  2.0 unx     1240 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiType.java\n--rw-r--r--  2.0 unx     1532 b- defN 21-Jul-23 13:13 org/fusesource/jansi/WindowsSupport.java\n--rw-r--r--  2.0 unx     5056 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/CLibrary.java\n--rw-r--r--  2.0 unx    14528 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/JansiLoader.java\n--rw-r--r--  2.0 unx    17284 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/Kernel32.java\n--rw-r--r--  2.0 unx     7247 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/OSInfo.java\n--rw-r--r--  2.0 unx    12129 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/AnsiOutputStream.java\n--rw-r--r--  2.0 unx    23924 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/AnsiProcessor.java\n--rw-r--r--  2.0 unx     6754 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/Colors.java\n--rw-r--r--  2.0 unx     5966 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/ColorsAnsiProcessor.java\n--rw-r--r--  2.0 unx     1914 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/FastBufferedOutputStream.java\n--rw-r--r--  2.0 unx    17865 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/WindowsAnsiProcessor.java\n--rw-r--r--  2.0 unx       28 b- defN 21-Jul-23 13:13 org/fusesource/jansi/jansi.properties\n--rw-r--r--  2.0 unx      146 b- defN 21-Jul-23 13:13 META-INF/native-image/jansi/resource-config.json\n+-rw-r--r--  2.0 unx    23187 b- defN 21-Jul-23 13:13 org/fusesource/jansi/Ansi.java\n+-rw-r--r--  2.0 unx      991 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiColors.java\n+-rw-r--r--  2.0 unx    21343 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiConsole.java\n+-rw-r--r--  2.0 unx    11768 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiMain.java\n+-rw-r--r--  2.0 unx     1074 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiMode.java\n+-rw-r--r--  2.0 unx     2714 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiPrintStream.java\n+-rw-r--r--  2.0 unx     7351 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiRenderer.java\n+-rw-r--r--  2.0 unx     1200 b- defN 21-Jul-23 13:13 org/fusesource/jansi/AnsiType.java\n+-rw-r--r--  2.0 unx     1490 b- defN 21-Jul-23 13:13 org/fusesource/jansi/WindowsSupport.java\n+-rw-r--r--  2.0 unx     4885 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/CLibrary.java\n+-rw-r--r--  2.0 unx    14135 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/JansiLoader.java\n+-rw-r--r--  2.0 unx    16706 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/Kernel32.java\n+-rw-r--r--  2.0 unx     7033 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/OSInfo.java\n+-rw-r--r--  2.0 unx    11779 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/AnsiOutputStream.java\n+-rw-r--r--  2.0 unx    23326 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/AnsiProcessor.java\n+-rw-r--r--  2.0 unx     6594 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/Colors.java\n+-rw-r--r--  2.0 unx     5824 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/ColorsAnsiProcessor.java\n+-rw-r--r--  2.0 unx     1845 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/FastBufferedOutputStream.java\n+-rw-r--r--  2.0 unx    17439 b- defN 21-Jul-23 13:13 org/fusesource/jansi/io/WindowsAnsiProcessor.java\n+-rw-r--r--  2.0 unx       27 b- defN 21-Jul-23 13:13 org/fusesource/jansi/jansi.properties\n+-rw-r--r--  2.0 unx      141 b- defN 21-Jul-23 13:13 META-INF/native-image/jansi/resource-config.json\n -rw-r--r--  2.0 unx    12876 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/FreeBSD/x86/libjansi.so\n -rw-r--r--  2.0 unx    16292 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/FreeBSD/x86_64/libjansi.so\n -rw-r--r--  2.0 unx    22744 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Linux/arm/libjansi.so\n -rw-r--r--  2.0 unx    16856 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Linux/arm64/libjansi.so\n -rw-r--r--  2.0 unx    12924 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Linux/armv7/libjansi.so\n -rw-r--r--  2.0 unx    19352 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Linux/ppc64/libjansi.so\n -rw-r--r--  2.0 unx    17848 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Linux/x86/libjansi.so\n -rw-r--r--  2.0 unx    16864 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Linux/x86_64/libjansi.so\n -rw-r--r--  2.0 unx    15084 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Mac/x86/libjansi.jnilib\n -rw-r--r--  2.0 unx    15964 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Mac/x86_64/libjansi.jnilib\n -rw-r--r--  2.0 unx   115019 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Windows/x86/jansi.dll\n -rw-r--r--  2.0 unx   129109 b- defN 21-Jul-23 13:13 org/fusesource/jansi/internal/native/Windows/x86_64/jansi.dll\n -rw-r--r--  2.0 unx      935 b- defN 21-Jul-23 13:13 org/fusesource/jansi/jansi.txt\n--rw-r--r--  2.0 unx    14435 b- defN 21-Jul-23 13:13 META-INF/maven/org.fusesource.jansi/jansi/pom.xml\n+-rw-r--r--  2.0 unx    14082 b- defN 21-Jul-23 13:13 META-INF/maven/org.fusesource.jansi/jansi/pom.xml\n -rw-r--r--  2.0 unx       60 b- defN 21-Jul-23 13:13 META-INF/maven/org.fusesource.jansi/jansi/pom.properties\n-65 files, 612690 bytes uncompressed, 170483 bytes compressed:  72.2%\n+65 files, 606925 bytes uncompressed, 170212 bytes compressed:  72.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -527,2758 +527,2758 @@\n 007D3 Extract Zip Spec      14 (20) '2.0'\n 007D4 Extract OS            00 (0) 'MS-DOS'\n 007D5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n 007D7 Compression Method    0008 (8) 'Deflated'\n 007D9 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-007DD CRC                   2BA4533F (732189503)\n-007E1 Compressed Size       00000FD4 (4052)\n-007E5 Uncompressed Size     00005E47 (24135)\n+007DD CRC                   EA03ABD5 (3926109141)\n+007E1 Compressed Size       00000FBE (4030)\n+007E5 Uncompressed Size     00005A93 (23187)\n 007E9 Filename Length       001E (30)\n 007EB Extra Length          0000 (0)\n 007ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x7ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 0080B PAYLOAD\n \n-017DF LOCAL HEADER #31      04034B50 (67324752)\n-017E3 Extract Zip Spec      14 (20) '2.0'\n-017E4 Extract OS            00 (0) 'MS-DOS'\n-017E5 General Purpose Flag  0800 (2048)\n+017C9 LOCAL HEADER #31      04034B50 (67324752)\n+017CD Extract Zip Spec      14 (20) '2.0'\n+017CE Extract OS            00 (0) 'MS-DOS'\n+017CF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-017E7 Compression Method    0008 (8) 'Deflated'\n-017E9 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-017ED CRC                   1626ADEB (371633643)\n-017F1 Compressed Size       00000229 (553)\n-017F5 Uncompressed Size     00000405 (1029)\n-017F9 Filename Length       0024 (36)\n-017FB Extra Length          0000 (0)\n-017FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+017D1 Compression Method    0008 (8) 'Deflated'\n+017D3 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+017D7 CRC                   36E9AF18 (921284376)\n+017DB Compressed Size       00000221 (545)\n+017DF Uncompressed Size     000003DF (991)\n+017E3 Filename Length       0024 (36)\n+017E5 Extra Length          0000 (0)\n+017E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01821 PAYLOAD\n+0180B PAYLOAD\n \n-01A4A LOCAL HEADER #32      04034B50 (67324752)\n-01A4E Extract Zip Spec      14 (20) '2.0'\n-01A4F Extract OS            00 (0) 'MS-DOS'\n-01A50 General Purpose Flag  0800 (2048)\n+01A2C LOCAL HEADER #32      04034B50 (67324752)\n+01A30 Extract Zip Spec      14 (20) '2.0'\n+01A31 Extract OS            00 (0) 'MS-DOS'\n+01A32 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-01A52 Compression Method    0008 (8) 'Deflated'\n-01A54 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-01A58 CRC                   10F3A5DC (284403164)\n-01A5C Compressed Size       000014B6 (5302)\n-01A60 Uncompressed Size     0000558F (21903)\n-01A64 Filename Length       0025 (37)\n-01A66 Extra Length          0000 (0)\n-01A68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+01A34 Compression Method    0008 (8) 'Deflated'\n+01A36 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+01A3A CRC                   E0926690 (3767690896)\n+01A3E Compressed Size       000014A0 (5280)\n+01A42 Uncompressed Size     0000535F (21343)\n+01A46 Filename Length       0025 (37)\n+01A48 Extra Length          0000 (0)\n+01A4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1A68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1A4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01A8D PAYLOAD\n+01A6F PAYLOAD\n \n-02F43 LOCAL HEADER #33      04034B50 (67324752)\n-02F47 Extract Zip Spec      14 (20) '2.0'\n-02F48 Extract OS            00 (0) 'MS-DOS'\n-02F49 General Purpose Flag  0800 (2048)\n+02F0F LOCAL HEADER #33      04034B50 (67324752)\n+02F13 Extract Zip Spec      14 (20) '2.0'\n+02F14 Extract OS            00 (0) 'MS-DOS'\n+02F15 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-02F4B Compression Method    0008 (8) 'Deflated'\n-02F4D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-02F51 CRC                   82DC48D4 (2195474644)\n-02F55 Compressed Size       00000BE2 (3042)\n-02F59 Uncompressed Size     00002F19 (12057)\n-02F5D Filename Length       0022 (34)\n-02F5F Extra Length          0000 (0)\n-02F61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02F17 Compression Method    0008 (8) 'Deflated'\n+02F19 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+02F1D CRC                   61ADB259 (1638773337)\n+02F21 Compressed Size       00000BD0 (3024)\n+02F25 Uncompressed Size     00002DF8 (11768)\n+02F29 Filename Length       0022 (34)\n+02F2B Extra Length          0000 (0)\n+02F2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2F61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2F2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02F83 PAYLOAD\n+02F4F PAYLOAD\n \n-03B65 LOCAL HEADER #34      04034B50 (67324752)\n-03B69 Extract Zip Spec      14 (20) '2.0'\n-03B6A Extract OS            00 (0) 'MS-DOS'\n-03B6B General Purpose Flag  0800 (2048)\n+03B1F LOCAL HEADER #34      04034B50 (67324752)\n+03B23 Extract Zip Spec      14 (20) '2.0'\n+03B24 Extract OS            00 (0) 'MS-DOS'\n+03B25 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03B6D Compression Method    0008 (8) 'Deflated'\n-03B6F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-03B73 CRC                   B1F7FE75 (2985819765)\n-03B77 Compressed Size       00000250 (592)\n-03B7B Uncompressed Size     00000458 (1112)\n-03B7F Filename Length       0022 (34)\n-03B81 Extra Length          0000 (0)\n-03B83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03B27 Compression Method    0008 (8) 'Deflated'\n+03B29 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+03B2D CRC                   EE42052D (3997304109)\n+03B31 Compressed Size       00000247 (583)\n+03B35 Uncompressed Size     00000432 (1074)\n+03B39 Filename Length       0022 (34)\n+03B3B Extra Length          0000 (0)\n+03B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3B83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03BA5 PAYLOAD\n+03B5F PAYLOAD\n \n-03DF5 LOCAL HEADER #35      04034B50 (67324752)\n-03DF9 Extract Zip Spec      14 (20) '2.0'\n-03DFA Extract OS            00 (0) 'MS-DOS'\n-03DFB General Purpose Flag  0800 (2048)\n+03DA6 LOCAL HEADER #35      04034B50 (67324752)\n+03DAA Extract Zip Spec      14 (20) '2.0'\n+03DAB Extract OS            00 (0) 'MS-DOS'\n+03DAC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03DFD Compression Method    0008 (8) 'Deflated'\n-03DFF Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-03E03 CRC                   9070D9B4 (2423314868)\n-03E07 Compressed Size       000003E0 (992)\n-03E0B Uncompressed Size     00000AF9 (2809)\n-03E0F Filename Length       0029 (41)\n-03E11 Extra Length          0000 (0)\n-03E13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03DAE Compression Method    0008 (8) 'Deflated'\n+03DB0 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+03DB4 CRC                   A111204E (2702254158)\n+03DB8 Compressed Size       000003D6 (982)\n+03DBC Uncompressed Size     00000A9A (2714)\n+03DC0 Filename Length       0029 (41)\n+03DC2 Extra Length          0000 (0)\n+03DC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3E13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3DC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03E3C PAYLOAD\n+03DED PAYLOAD\n \n-0421C LOCAL HEADER #36      04034B50 (67324752)\n-04220 Extract Zip Spec      14 (20) '2.0'\n-04221 Extract OS            00 (0) 'MS-DOS'\n-04222 General Purpose Flag  0800 (2048)\n+041C3 LOCAL HEADER #36      04034B50 (67324752)\n+041C7 Extract Zip Spec      14 (20) '2.0'\n+041C8 Extract OS            00 (0) 'MS-DOS'\n+041C9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04224 Compression Method    0008 (8) 'Deflated'\n-04226 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0422A CRC                   145FE0AA (341827754)\n-0422E Compressed Size       00000870 (2160)\n-04232 Uncompressed Size     00001DB6 (7606)\n-04236 Filename Length       0026 (38)\n-04238 Extra Length          0000 (0)\n-0423A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+041CB Compression Method    0008 (8) 'Deflated'\n+041CD Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+041D1 CRC                   946FB6E7 (2490349287)\n+041D5 Compressed Size       00000862 (2146)\n+041D9 Uncompressed Size     00001CB7 (7351)\n+041DD Filename Length       0026 (38)\n+041DF Extra Length          0000 (0)\n+041E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x423A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x41E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04260 PAYLOAD\n+04207 PAYLOAD\n \n-04AD0 LOCAL HEADER #37      04034B50 (67324752)\n-04AD4 Extract Zip Spec      14 (20) '2.0'\n-04AD5 Extract OS            00 (0) 'MS-DOS'\n-04AD6 General Purpose Flag  0800 (2048)\n+04A69 LOCAL HEADER #37      04034B50 (67324752)\n+04A6D Extract Zip Spec      14 (20) '2.0'\n+04A6E Extract OS            00 (0) 'MS-DOS'\n+04A6F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04AD8 Compression Method    0008 (8) 'Deflated'\n-04ADA Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-04ADE CRC                   EBDD55D1 (3957151185)\n-04AE2 Compressed Size       00000291 (657)\n-04AE6 Uncompressed Size     000004D8 (1240)\n-04AEA Filename Length       0022 (34)\n-04AEC Extra Length          0000 (0)\n-04AEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04A71 Compression Method    0008 (8) 'Deflated'\n+04A73 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+04A77 CRC                   4346D71A (1128716058)\n+04A7B Compressed Size       00000289 (649)\n+04A7F Uncompressed Size     000004B0 (1200)\n+04A83 Filename Length       0022 (34)\n+04A85 Extra Length          0000 (0)\n+04A87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4AEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4A87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04B10 PAYLOAD\n+04AA9 PAYLOAD\n \n-04DA1 LOCAL HEADER #38      04034B50 (67324752)\n-04DA5 Extract Zip Spec      14 (20) '2.0'\n-04DA6 Extract OS            00 (0) 'MS-DOS'\n-04DA7 General Purpose Flag  0800 (2048)\n+04D32 LOCAL HEADER #38      04034B50 (67324752)\n+04D36 Extract Zip Spec      14 (20) '2.0'\n+04D37 Extract OS            00 (0) 'MS-DOS'\n+04D38 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04DA9 Compression Method    0008 (8) 'Deflated'\n-04DAB Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-04DAF CRC                   F4A210E5 (4104261861)\n-04DB3 Compressed Size       000002C9 (713)\n-04DB7 Uncompressed Size     000005FC (1532)\n-04DBB Filename Length       0028 (40)\n-04DBD Extra Length          0000 (0)\n-04DBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04D3A Compression Method    0008 (8) 'Deflated'\n+04D3C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+04D40 CRC                   2E65ACD1 (778415313)\n+04D44 Compressed Size       000002C2 (706)\n+04D48 Uncompressed Size     000005D2 (1490)\n+04D4C Filename Length       0028 (40)\n+04D4E Extra Length          0000 (0)\n+04D50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4DBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4D50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04DE7 PAYLOAD\n+04D78 PAYLOAD\n \n-050B0 LOCAL HEADER #39      04034B50 (67324752)\n-050B4 Extract Zip Spec      14 (20) '2.0'\n-050B5 Extract OS            00 (0) 'MS-DOS'\n-050B6 General Purpose Flag  0800 (2048)\n+0503A LOCAL HEADER #39      04034B50 (67324752)\n+0503E Extract Zip Spec      14 (20) '2.0'\n+0503F Extract OS            00 (0) 'MS-DOS'\n+05040 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-050B8 Compression Method    0008 (8) 'Deflated'\n-050BA Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-050BE CRC                   A1D45456 (2715046998)\n-050C2 Compressed Size       00000622 (1570)\n-050C6 Uncompressed Size     000013C0 (5056)\n-050CA Filename Length       002B (43)\n-050CC Extra Length          0000 (0)\n-050CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05042 Compression Method    0008 (8) 'Deflated'\n+05044 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+05048 CRC                   462B0BE3 (1177226211)\n+0504C Compressed Size       00000619 (1561)\n+05050 Uncompressed Size     00001315 (4885)\n+05054 Filename Length       002B (43)\n+05056 Extra Length          0000 (0)\n+05058 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x50CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5058: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-050F9 PAYLOAD\n+05083 PAYLOAD\n \n-0571B LOCAL HEADER #40      04034B50 (67324752)\n-0571F Extract Zip Spec      14 (20) '2.0'\n-05720 Extract OS            00 (0) 'MS-DOS'\n-05721 General Purpose Flag  0800 (2048)\n+0569C LOCAL HEADER #40      04034B50 (67324752)\n+056A0 Extract Zip Spec      14 (20) '2.0'\n+056A1 Extract OS            00 (0) 'MS-DOS'\n+056A2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05723 Compression Method    0008 (8) 'Deflated'\n-05725 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-05729 CRC                   8FD5E3A8 (2413159336)\n-0572D Compressed Size       00000E99 (3737)\n-05731 Uncompressed Size     000038C0 (14528)\n-05735 Filename Length       002E (46)\n-05737 Extra Length          0000 (0)\n-05739 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+056A4 Compression Method    0008 (8) 'Deflated'\n+056A6 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+056AA CRC                   FAEDFD42 (4209900866)\n+056AE Compressed Size       00000E87 (3719)\n+056B2 Uncompressed Size     00003737 (14135)\n+056B6 Filename Length       002E (46)\n+056B8 Extra Length          0000 (0)\n+056BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5739: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x56BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05767 PAYLOAD\n+056E8 PAYLOAD\n \n-06600 LOCAL HEADER #41      04034B50 (67324752)\n-06604 Extract Zip Spec      14 (20) '2.0'\n-06605 Extract OS            00 (0) 'MS-DOS'\n-06606 General Purpose Flag  0800 (2048)\n+0656F LOCAL HEADER #41      04034B50 (67324752)\n+06573 Extract Zip Spec      14 (20) '2.0'\n+06574 Extract OS            00 (0) 'MS-DOS'\n+06575 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-06608 Compression Method    0008 (8) 'Deflated'\n-0660A Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0660E CRC                   E731CECA (3878801098)\n-06612 Compressed Size       00000D1E (3358)\n-06616 Uncompressed Size     00004384 (17284)\n-0661A Filename Length       002B (43)\n-0661C Extra Length          0000 (0)\n-0661E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06577 Compression Method    0008 (8) 'Deflated'\n+06579 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0657D CRC                   E2574654 (3797370452)\n+06581 Compressed Size       00000D0C (3340)\n+06585 Uncompressed Size     00004142 (16706)\n+06589 Filename Length       002B (43)\n+0658B Extra Length          0000 (0)\n+0658D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x661E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x658D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06649 PAYLOAD\n+065B8 PAYLOAD\n \n-07367 LOCAL HEADER #42      04034B50 (67324752)\n-0736B Extract Zip Spec      14 (20) '2.0'\n-0736C Extract OS            00 (0) 'MS-DOS'\n-0736D General Purpose Flag  0800 (2048)\n+072C4 LOCAL HEADER #42      04034B50 (67324752)\n+072C8 Extract Zip Spec      14 (20) '2.0'\n+072C9 Extract OS            00 (0) 'MS-DOS'\n+072CA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0736F Compression Method    0008 (8) 'Deflated'\n-07371 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-07375 CRC                   2CCD3D7E (751648126)\n-07379 Compressed Size       000007FF (2047)\n-0737D Uncompressed Size     00001C4F (7247)\n-07381 Filename Length       0029 (41)\n-07383 Extra Length          0000 (0)\n-07385 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+072CC Compression Method    0008 (8) 'Deflated'\n+072CE Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+072D2 CRC                   9F2DA6B8 (2670569144)\n+072D6 Compressed Size       000007F3 (2035)\n+072DA Uncompressed Size     00001B79 (7033)\n+072DE Filename Length       0029 (41)\n+072E0 Extra Length          0000 (0)\n+072E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7385: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x72E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-073AE PAYLOAD\n+0730B PAYLOAD\n \n-07BAD LOCAL HEADER #43      04034B50 (67324752)\n-07BB1 Extract Zip Spec      14 (20) '2.0'\n-07BB2 Extract OS            00 (0) 'MS-DOS'\n-07BB3 General Purpose Flag  0800 (2048)\n+07AFE LOCAL HEADER #43      04034B50 (67324752)\n+07B02 Extract Zip Spec      14 (20) '2.0'\n+07B03 Extract OS            00 (0) 'MS-DOS'\n+07B04 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07BB5 Compression Method    0008 (8) 'Deflated'\n-07BB7 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-07BBB CRC                   A957C743 (2841102147)\n-07BBF Compressed Size       00000A21 (2593)\n-07BC3 Uncompressed Size     00002F61 (12129)\n-07BC7 Filename Length       002D (45)\n-07BC9 Extra Length          0000 (0)\n-07BCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07B06 Compression Method    0008 (8) 'Deflated'\n+07B08 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+07B0C CRC                   0C268234 (203850292)\n+07B10 Compressed Size       00000A12 (2578)\n+07B14 Uncompressed Size     00002E03 (11779)\n+07B18 Filename Length       002D (45)\n+07B1A Extra Length          0000 (0)\n+07B1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7BCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7B1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07BF8 PAYLOAD\n+07B49 PAYLOAD\n \n-08619 LOCAL HEADER #44      04034B50 (67324752)\n-0861D Extract Zip Spec      14 (20) '2.0'\n-0861E Extract OS            00 (0) 'MS-DOS'\n-0861F General Purpose Flag  0800 (2048)\n+0855B LOCAL HEADER #44      04034B50 (67324752)\n+0855F Extract Zip Spec      14 (20) '2.0'\n+08560 Extract OS            00 (0) 'MS-DOS'\n+08561 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08621 Compression Method    0008 (8) 'Deflated'\n-08623 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-08627 CRC                   5CE38909 (1558415625)\n-0862B Compressed Size       0000103D (4157)\n-0862F Uncompressed Size     00005D74 (23924)\n-08633 Filename Length       002A (42)\n-08635 Extra Length          0000 (0)\n-08637 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08563 Compression Method    0008 (8) 'Deflated'\n+08565 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+08569 CRC                   AA4194FB (2856424699)\n+0856D Compressed Size       0000102E (4142)\n+08571 Uncompressed Size     00005B1E (23326)\n+08575 Filename Length       002A (42)\n+08577 Extra Length          0000 (0)\n+08579 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8637: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8579: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08661 PAYLOAD\n+085A3 PAYLOAD\n \n-0969E LOCAL HEADER #45      04034B50 (67324752)\n-096A2 Extract Zip Spec      14 (20) '2.0'\n-096A3 Extract OS            00 (0) 'MS-DOS'\n-096A4 General Purpose Flag  0800 (2048)\n+095D1 LOCAL HEADER #45      04034B50 (67324752)\n+095D5 Extract Zip Spec      14 (20) '2.0'\n+095D6 Extract OS            00 (0) 'MS-DOS'\n+095D7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-096A6 Compression Method    0008 (8) 'Deflated'\n-096A8 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-096AC CRC                   5D7A4DC7 (1568296391)\n-096B0 Compressed Size       000007D7 (2007)\n-096B4 Uncompressed Size     00001A62 (6754)\n-096B8 Filename Length       0023 (35)\n-096BA Extra Length          0000 (0)\n-096BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+095D9 Compression Method    0008 (8) 'Deflated'\n+095DB Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+095DF CRC                   FC5F7A58 (4234115672)\n+095E3 Compressed Size       000007CB (1995)\n+095E7 Uncompressed Size     000019C2 (6594)\n+095EB Filename Length       0023 (35)\n+095ED Extra Length          0000 (0)\n+095EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x96BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x95EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-096DF PAYLOAD\n+09612 PAYLOAD\n \n-09EB6 LOCAL HEADER #46      04034B50 (67324752)\n-09EBA Extract Zip Spec      14 (20) '2.0'\n-09EBB Extract OS            00 (0) 'MS-DOS'\n-09EBC General Purpose Flag  0800 (2048)\n+09DDD LOCAL HEADER #46      04034B50 (67324752)\n+09DE1 Extract Zip Spec      14 (20) '2.0'\n+09DE2 Extract OS            00 (0) 'MS-DOS'\n+09DE3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09EBE Compression Method    0008 (8) 'Deflated'\n-09EC0 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-09EC4 CRC                   F704B52A (4144280874)\n-09EC8 Compressed Size       00000592 (1426)\n-09ECC Uncompressed Size     0000174E (5966)\n-09ED0 Filename Length       0030 (48)\n-09ED2 Extra Length          0000 (0)\n-09ED4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09DE5 Compression Method    0008 (8) 'Deflated'\n+09DE7 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+09DEB CRC                   4AA9E778 (1252648824)\n+09DEF Compressed Size       00000589 (1417)\n+09DF3 Uncompressed Size     000016C0 (5824)\n+09DF7 Filename Length       0030 (48)\n+09DF9 Extra Length          0000 (0)\n+09DFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9ED4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9DFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09F04 PAYLOAD\n+09E2B PAYLOAD\n \n-0A496 LOCAL HEADER #47      04034B50 (67324752)\n-0A49A Extract Zip Spec      14 (20) '2.0'\n-0A49B Extract OS            00 (0) 'MS-DOS'\n-0A49C General Purpose Flag  0800 (2048)\n+0A3B4 LOCAL HEADER #47      04034B50 (67324752)\n+0A3B8 Extract Zip Spec      14 (20) '2.0'\n+0A3B9 Extract OS            00 (0) 'MS-DOS'\n+0A3BA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A49E Compression Method    0008 (8) 'Deflated'\n-0A4A0 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0A4A4 CRC                   650A50CF (1695174863)\n-0A4A8 Compressed Size       0000030F (783)\n-0A4AC Uncompressed Size     0000077A (1914)\n-0A4B0 Filename Length       0035 (53)\n-0A4B2 Extra Length          0000 (0)\n-0A4B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A3BC Compression Method    0008 (8) 'Deflated'\n+0A3BE Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0A3C2 CRC                   3AE1B870 (987871344)\n+0A3C6 Compressed Size       00000307 (775)\n+0A3CA Uncompressed Size     00000735 (1845)\n+0A3CE Filename Length       0035 (53)\n+0A3D0 Extra Length          0000 (0)\n+0A3D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA4B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA3D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A4E9 PAYLOAD\n+0A407 PAYLOAD\n \n-0A7F8 LOCAL HEADER #48      04034B50 (67324752)\n-0A7FC Extract Zip Spec      14 (20) '2.0'\n-0A7FD Extract OS            00 (0) 'MS-DOS'\n-0A7FE General Purpose Flag  0800 (2048)\n+0A70E LOCAL HEADER #48      04034B50 (67324752)\n+0A712 Extract Zip Spec      14 (20) '2.0'\n+0A713 Extract OS            00 (0) 'MS-DOS'\n+0A714 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A800 Compression Method    0008 (8) 'Deflated'\n-0A802 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0A806 CRC                   FD56735F (4250301279)\n-0A80A Compressed Size       00000C16 (3094)\n-0A80E Uncompressed Size     000045C9 (17865)\n-0A812 Filename Length       0031 (49)\n-0A814 Extra Length          0000 (0)\n-0A816 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A716 Compression Method    0008 (8) 'Deflated'\n+0A718 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0A71C CRC                   942036A4 (2485139108)\n+0A720 Compressed Size       00000C06 (3078)\n+0A724 Uncompressed Size     0000441F (17439)\n+0A728 Filename Length       0031 (49)\n+0A72A Extra Length          0000 (0)\n+0A72C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA816: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA72C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A847 PAYLOAD\n+0A75D PAYLOAD\n \n-0B45D LOCAL HEADER #49      04034B50 (67324752)\n-0B461 Extract Zip Spec      14 (20) '2.0'\n-0B462 Extract OS            00 (0) 'MS-DOS'\n-0B463 General Purpose Flag  0800 (2048)\n+0B363 LOCAL HEADER #49      04034B50 (67324752)\n+0B367 Extract Zip Spec      14 (20) '2.0'\n+0B368 Extract OS            00 (0) 'MS-DOS'\n+0B369 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B465 Compression Method    0008 (8) 'Deflated'\n-0B467 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0B46B CRC                   5C7E4A57 (1551780439)\n-0B46F Compressed Size       0000001A (26)\n-0B473 Uncompressed Size     0000001C (28)\n-0B477 Filename Length       0025 (37)\n-0B479 Extra Length          0000 (0)\n-0B47B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B36B Compression Method    0008 (8) 'Deflated'\n+0B36D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0B371 CRC                   5C2EB634 (1546565172)\n+0B375 Compressed Size       00000019 (25)\n+0B379 Uncompressed Size     0000001B (27)\n+0B37D Filename Length       0025 (37)\n+0B37F Extra Length          0000 (0)\n+0B381 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB47B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB381: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B4A0 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B3A6 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0B4BA LOCAL HEADER #50      04034B50 (67324752)\n-0B4BE Extract Zip Spec      14 (20) '2.0'\n-0B4BF Extract OS            00 (0) 'MS-DOS'\n-0B4C0 General Purpose Flag  0800 (2048)\n+0B3BF LOCAL HEADER #50      04034B50 (67324752)\n+0B3C3 Extract Zip Spec      14 (20) '2.0'\n+0B3C4 Extract OS            00 (0) 'MS-DOS'\n+0B3C5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B4C2 Compression Method    0008 (8) 'Deflated'\n-0B4C4 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0B4C8 CRC                   730D69A1 (1930258849)\n-0B4CC Compressed Size       0000005C (92)\n-0B4D0 Uncompressed Size     00000092 (146)\n-0B4D4 Filename Length       0030 (48)\n-0B4D6 Extra Length          0000 (0)\n-0B4D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B3C7 Compression Method    0008 (8) 'Deflated'\n+0B3C9 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0B3CD CRC                   DD6F8F44 (3715075908)\n+0B3D1 Compressed Size       0000005A (90)\n+0B3D5 Uncompressed Size     0000008D (141)\n+0B3D9 Filename Length       0030 (48)\n+0B3DB Extra Length          0000 (0)\n+0B3DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB4D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB3DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B508 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B40D PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0B564 LOCAL HEADER #51      04034B50 (67324752)\n-0B568 Extract Zip Spec      14 (20) '2.0'\n-0B569 Extract OS            00 (0) 'MS-DOS'\n-0B56A General Purpose Flag  0800 (2048)\n+0B467 LOCAL HEADER #51      04034B50 (67324752)\n+0B46B Extract Zip Spec      14 (20) '2.0'\n+0B46C Extract OS            00 (0) 'MS-DOS'\n+0B46D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B56C Compression Method    0008 (8) 'Deflated'\n-0B56E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0B572 CRC                   E497D7EA (3835156458)\n-0B576 Compressed Size       00001140 (4416)\n-0B57A Uncompressed Size     0000324C (12876)\n-0B57E Filename Length       003C (60)\n-0B580 Extra Length          0000 (0)\n-0B582 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B46F Compression Method    0008 (8) 'Deflated'\n+0B471 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0B475 CRC                   E497D7EA (3835156458)\n+0B479 Compressed Size       00001140 (4416)\n+0B47D Uncompressed Size     0000324C (12876)\n+0B481 Filename Length       003C (60)\n+0B483 Extra Length          0000 (0)\n+0B485 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB582: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB485: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B5BE PAYLOAD\n+0B4C1 PAYLOAD\n \n-0C6FE LOCAL HEADER #52      04034B50 (67324752)\n-0C702 Extract Zip Spec      14 (20) '2.0'\n-0C703 Extract OS            00 (0) 'MS-DOS'\n-0C704 General Purpose Flag  0800 (2048)\n+0C601 LOCAL HEADER #52      04034B50 (67324752)\n+0C605 Extract Zip Spec      14 (20) '2.0'\n+0C606 Extract OS            00 (0) 'MS-DOS'\n+0C607 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C706 Compression Method    0008 (8) 'Deflated'\n-0C708 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0C70C CRC                   F1F630C0 (4059443392)\n-0C710 Compressed Size       000013DD (5085)\n-0C714 Uncompressed Size     00003FA4 (16292)\n-0C718 Filename Length       003F (63)\n-0C71A Extra Length          0000 (0)\n-0C71C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C609 Compression Method    0008 (8) 'Deflated'\n+0C60B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0C60F CRC                   F1F630C0 (4059443392)\n+0C613 Compressed Size       000013DD (5085)\n+0C617 Uncompressed Size     00003FA4 (16292)\n+0C61B Filename Length       003F (63)\n+0C61D Extra Length          0000 (0)\n+0C61F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC71C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC61F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C75B PAYLOAD\n+0C65E PAYLOAD\n \n-0DB38 LOCAL HEADER #53      04034B50 (67324752)\n-0DB3C Extract Zip Spec      14 (20) '2.0'\n-0DB3D Extract OS            00 (0) 'MS-DOS'\n-0DB3E General Purpose Flag  0800 (2048)\n+0DA3B LOCAL HEADER #53      04034B50 (67324752)\n+0DA3F Extract Zip Spec      14 (20) '2.0'\n+0DA40 Extract OS            00 (0) 'MS-DOS'\n+0DA41 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0DB40 Compression Method    0008 (8) 'Deflated'\n-0DB42 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0DB46 CRC                   950F3569 (2500801897)\n-0DB4A Compressed Size       00001A2B (6699)\n-0DB4E Uncompressed Size     000058D8 (22744)\n-0DB52 Filename Length       003A (58)\n-0DB54 Extra Length          0000 (0)\n-0DB56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0DA43 Compression Method    0008 (8) 'Deflated'\n+0DA45 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0DA49 CRC                   950F3569 (2500801897)\n+0DA4D Compressed Size       00001A2B (6699)\n+0DA51 Uncompressed Size     000058D8 (22744)\n+0DA55 Filename Length       003A (58)\n+0DA57 Extra Length          0000 (0)\n+0DA59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xDB56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDA59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0DB90 PAYLOAD\n+0DA93 PAYLOAD\n \n-0F5BB LOCAL HEADER #54      04034B50 (67324752)\n-0F5BF Extract Zip Spec      14 (20) '2.0'\n-0F5C0 Extract OS            00 (0) 'MS-DOS'\n-0F5C1 General Purpose Flag  0800 (2048)\n+0F4BE LOCAL HEADER #54      04034B50 (67324752)\n+0F4C2 Extract Zip Spec      14 (20) '2.0'\n+0F4C3 Extract OS            00 (0) 'MS-DOS'\n+0F4C4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F5C3 Compression Method    0008 (8) 'Deflated'\n-0F5C5 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-0F5C9 CRC                   78DAFB34 (2027617076)\n-0F5CD Compressed Size       00001343 (4931)\n-0F5D1 Uncompressed Size     000041D8 (16856)\n-0F5D5 Filename Length       003C (60)\n-0F5D7 Extra Length          0000 (0)\n-0F5D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F4C6 Compression Method    0008 (8) 'Deflated'\n+0F4C8 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+0F4CC CRC                   78DAFB34 (2027617076)\n+0F4D0 Compressed Size       00001343 (4931)\n+0F4D4 Uncompressed Size     000041D8 (16856)\n+0F4D8 Filename Length       003C (60)\n+0F4DA Extra Length          0000 (0)\n+0F4DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF5D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF4DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0F615 PAYLOAD\n+0F518 PAYLOAD\n \n-10958 LOCAL HEADER #55      04034B50 (67324752)\n-1095C Extract Zip Spec      14 (20) '2.0'\n-1095D Extract OS            00 (0) 'MS-DOS'\n-1095E General Purpose Flag  0800 (2048)\n+1085B LOCAL HEADER #55      04034B50 (67324752)\n+1085F Extract Zip Spec      14 (20) '2.0'\n+10860 Extract OS            00 (0) 'MS-DOS'\n+10861 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10960 Compression Method    0008 (8) 'Deflated'\n-10962 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-10966 CRC                   BAB7DC59 (3132611673)\n-1096A Compressed Size       000012BE (4798)\n-1096E Uncompressed Size     0000327C (12924)\n-10972 Filename Length       003C (60)\n-10974 Extra Length          0000 (0)\n-10976 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10863 Compression Method    0008 (8) 'Deflated'\n+10865 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+10869 CRC                   BAB7DC59 (3132611673)\n+1086D Compressed Size       000012BE (4798)\n+10871 Uncompressed Size     0000327C (12924)\n+10875 Filename Length       003C (60)\n+10877 Extra Length          0000 (0)\n+10879 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10976: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10879: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-109B2 PAYLOAD\n+108B5 PAYLOAD\n \n-11C70 LOCAL HEADER #56      04034B50 (67324752)\n-11C74 Extract Zip Spec      14 (20) '2.0'\n-11C75 Extract OS            00 (0) 'MS-DOS'\n-11C76 General Purpose Flag  0800 (2048)\n+11B73 LOCAL HEADER #56      04034B50 (67324752)\n+11B77 Extract Zip Spec      14 (20) '2.0'\n+11B78 Extract OS            00 (0) 'MS-DOS'\n+11B79 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11C78 Compression Method    0008 (8) 'Deflated'\n-11C7A Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-11C7E CRC                   24DF140F (618599439)\n-11C82 Compressed Size       00001588 (5512)\n-11C86 Uncompressed Size     00004B98 (19352)\n-11C8A Filename Length       003C (60)\n-11C8C Extra Length          0000 (0)\n-11C8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11B7B Compression Method    0008 (8) 'Deflated'\n+11B7D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+11B81 CRC                   24DF140F (618599439)\n+11B85 Compressed Size       00001588 (5512)\n+11B89 Uncompressed Size     00004B98 (19352)\n+11B8D Filename Length       003C (60)\n+11B8F Extra Length          0000 (0)\n+11B91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11C8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11B91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11CCA PAYLOAD\n+11BCD PAYLOAD\n \n-13252 LOCAL HEADER #57      04034B50 (67324752)\n-13256 Extract Zip Spec      14 (20) '2.0'\n-13257 Extract OS            00 (0) 'MS-DOS'\n-13258 General Purpose Flag  0800 (2048)\n+13155 LOCAL HEADER #57      04034B50 (67324752)\n+13159 Extract Zip Spec      14 (20) '2.0'\n+1315A Extract OS            00 (0) 'MS-DOS'\n+1315B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1325A Compression Method    0008 (8) 'Deflated'\n-1325C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-13260 CRC                   321C2FD2 (840708050)\n-13264 Compressed Size       00001618 (5656)\n-13268 Uncompressed Size     000045B8 (17848)\n-1326C Filename Length       003A (58)\n-1326E Extra Length          0000 (0)\n-13270 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1315D Compression Method    0008 (8) 'Deflated'\n+1315F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+13163 CRC                   321C2FD2 (840708050)\n+13167 Compressed Size       00001618 (5656)\n+1316B Uncompressed Size     000045B8 (17848)\n+1316F Filename Length       003A (58)\n+13171 Extra Length          0000 (0)\n+13173 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x13270: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x13173: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-132AA PAYLOAD\n+131AD PAYLOAD\n \n-148C2 LOCAL HEADER #58      04034B50 (67324752)\n-148C6 Extract Zip Spec      14 (20) '2.0'\n-148C7 Extract OS            00 (0) 'MS-DOS'\n-148C8 General Purpose Flag  0800 (2048)\n+147C5 LOCAL HEADER #58      04034B50 (67324752)\n+147C9 Extract Zip Spec      14 (20) '2.0'\n+147CA Extract OS            00 (0) 'MS-DOS'\n+147CB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-148CA Compression Method    0008 (8) 'Deflated'\n-148CC Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-148D0 CRC                   3ECC3177 (1053569399)\n-148D4 Compressed Size       00001550 (5456)\n-148D8 Uncompressed Size     000041E0 (16864)\n-148DC Filename Length       003D (61)\n-148DE Extra Length          0000 (0)\n-148E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+147CD Compression Method    0008 (8) 'Deflated'\n+147CF Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+147D3 CRC                   3ECC3177 (1053569399)\n+147D7 Compressed Size       00001550 (5456)\n+147DB Uncompressed Size     000041E0 (16864)\n+147DF Filename Length       003D (61)\n+147E1 Extra Length          0000 (0)\n+147E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x148E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x147E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1491D PAYLOAD\n+14820 PAYLOAD\n \n-15E6D LOCAL HEADER #59      04034B50 (67324752)\n-15E71 Extract Zip Spec      14 (20) '2.0'\n-15E72 Extract OS            00 (0) 'MS-DOS'\n-15E73 General Purpose Flag  0800 (2048)\n+15D70 LOCAL HEADER #59      04034B50 (67324752)\n+15D74 Extract Zip Spec      14 (20) '2.0'\n+15D75 Extract OS            00 (0) 'MS-DOS'\n+15D76 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15E75 Compression Method    0008 (8) 'Deflated'\n-15E77 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-15E7B CRC                   54FC5C00 (1425824768)\n-15E7F Compressed Size       00000C7E (3198)\n-15E83 Uncompressed Size     00003AEC (15084)\n-15E87 Filename Length       003C (60)\n-15E89 Extra Length          0000 (0)\n-15E8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+15D78 Compression Method    0008 (8) 'Deflated'\n+15D7A Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+15D7E CRC                   54FC5C00 (1425824768)\n+15D82 Compressed Size       00000C7E (3198)\n+15D86 Uncompressed Size     00003AEC (15084)\n+15D8A Filename Length       003C (60)\n+15D8C Extra Length          0000 (0)\n+15D8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15E8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15D8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15EC7 PAYLOAD\n+15DCA PAYLOAD\n \n-16B45 LOCAL HEADER #60      04034B50 (67324752)\n-16B49 Extract Zip Spec      14 (20) '2.0'\n-16B4A Extract OS            00 (0) 'MS-DOS'\n-16B4B General Purpose Flag  0800 (2048)\n+16A48 LOCAL HEADER #60      04034B50 (67324752)\n+16A4C Extract Zip Spec      14 (20) '2.0'\n+16A4D Extract OS            00 (0) 'MS-DOS'\n+16A4E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16B4D Compression Method    0008 (8) 'Deflated'\n-16B4F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-16B53 CRC                   F14BF548 (4048287048)\n-16B57 Compressed Size       00000F68 (3944)\n-16B5B Uncompressed Size     00003E5C (15964)\n-16B5F Filename Length       003F (63)\n-16B61 Extra Length          0000 (0)\n-16B63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16A50 Compression Method    0008 (8) 'Deflated'\n+16A52 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+16A56 CRC                   F14BF548 (4048287048)\n+16A5A Compressed Size       00000F68 (3944)\n+16A5E Uncompressed Size     00003E5C (15964)\n+16A62 Filename Length       003F (63)\n+16A64 Extra Length          0000 (0)\n+16A66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16B63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16A66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-16BA2 PAYLOAD\n+16AA5 PAYLOAD\n \n-17B0A LOCAL HEADER #61      04034B50 (67324752)\n-17B0E Extract Zip Spec      14 (20) '2.0'\n-17B0F Extract OS            00 (0) 'MS-DOS'\n-17B10 General Purpose Flag  0800 (2048)\n+17A0D LOCAL HEADER #61      04034B50 (67324752)\n+17A11 Extract Zip Spec      14 (20) '2.0'\n+17A12 Extract OS            00 (0) 'MS-DOS'\n+17A13 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17B12 Compression Method    0008 (8) 'Deflated'\n-17B14 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-17B18 CRC                   A2950D97 (2727677335)\n-17B1C Compressed Size       00008B34 (35636)\n-17B20 Uncompressed Size     0001C14B (115019)\n-17B24 Filename Length       003A (58)\n-17B26 Extra Length          0000 (0)\n-17B28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+17A15 Compression Method    0008 (8) 'Deflated'\n+17A17 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+17A1B CRC                   A2950D97 (2727677335)\n+17A1F Compressed Size       00008B34 (35636)\n+17A23 Uncompressed Size     0001C14B (115019)\n+17A27 Filename Length       003A (58)\n+17A29 Extra Length          0000 (0)\n+17A2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17B28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17A2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-17B62 PAYLOAD\n+17A65 PAYLOAD\n \n-20696 LOCAL HEADER #62      04034B50 (67324752)\n-2069A Extract Zip Spec      14 (20) '2.0'\n-2069B Extract OS            00 (0) 'MS-DOS'\n-2069C General Purpose Flag  0800 (2048)\n+20599 LOCAL HEADER #62      04034B50 (67324752)\n+2059D Extract Zip Spec      14 (20) '2.0'\n+2059E Extract OS            00 (0) 'MS-DOS'\n+2059F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2069E Compression Method    0008 (8) 'Deflated'\n-206A0 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-206A4 CRC                   A327DAE4 (2737298148)\n-206A8 Compressed Size       000097F7 (38903)\n-206AC Uncompressed Size     0001F855 (129109)\n-206B0 Filename Length       003D (61)\n-206B2 Extra Length          0000 (0)\n-206B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+205A1 Compression Method    0008 (8) 'Deflated'\n+205A3 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+205A7 CRC                   A327DAE4 (2737298148)\n+205AB Compressed Size       000097F7 (38903)\n+205AF Uncompressed Size     0001F855 (129109)\n+205B3 Filename Length       003D (61)\n+205B5 Extra Length          0000 (0)\n+205B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x206B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x205B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-206F1 PAYLOAD\n+205F4 PAYLOAD\n \n-29EE8 LOCAL HEADER #63      04034B50 (67324752)\n-29EEC Extract Zip Spec      14 (20) '2.0'\n-29EED Extract OS            00 (0) 'MS-DOS'\n-29EEE General Purpose Flag  0800 (2048)\n+29DEB LOCAL HEADER #63      04034B50 (67324752)\n+29DEF Extract Zip Spec      14 (20) '2.0'\n+29DF0 Extract OS            00 (0) 'MS-DOS'\n+29DF1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-29EF0 Compression Method    0008 (8) 'Deflated'\n-29EF2 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-29EF6 CRC                   E6B54850 (3870640208)\n-29EFA Compressed Size       000000DD (221)\n-29EFE Uncompressed Size     000003A7 (935)\n-29F02 Filename Length       001E (30)\n-29F04 Extra Length          0000 (0)\n-29F06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+29DF3 Compression Method    0008 (8) 'Deflated'\n+29DF5 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+29DF9 CRC                   E6B54850 (3870640208)\n+29DFD Compressed Size       000000DD (221)\n+29E01 Uncompressed Size     000003A7 (935)\n+29E05 Filename Length       001E (30)\n+29E07 Extra Length          0000 (0)\n+29E09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x29F06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29E09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-29F24 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+29E27 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-2A001 LOCAL HEADER #64      04034B50 (67324752)\n-2A005 Extract Zip Spec      14 (20) '2.0'\n-2A006 Extract OS            00 (0) 'MS-DOS'\n-2A007 General Purpose Flag  0800 (2048)\n+29F04 LOCAL HEADER #64      04034B50 (67324752)\n+29F08 Extract Zip Spec      14 (20) '2.0'\n+29F09 Extract OS            00 (0) 'MS-DOS'\n+29F0A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2A009 Compression Method    0008 (8) 'Deflated'\n-2A00B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2A00F CRC                   F12C1C87 (4046199943)\n-2A013 Compressed Size       00000B89 (2953)\n-2A017 Uncompressed Size     00003863 (14435)\n-2A01B Filename Length       0031 (49)\n-2A01D Extra Length          0000 (0)\n-2A01F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+29F0C Compression Method    0008 (8) 'Deflated'\n+29F0E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+29F12 CRC                   93833A61 (2474850913)\n+29F16 Compressed Size       00000B77 (2935)\n+29F1A Uncompressed Size     00003702 (14082)\n+29F1E Filename Length       0031 (49)\n+29F20 Extra Length          0000 (0)\n+29F22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2A01F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29F22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2A050 PAYLOAD\n+29F53 PAYLOAD\n \n-2ABD9 LOCAL HEADER #65      04034B50 (67324752)\n-2ABDD Extract Zip Spec      14 (20) '2.0'\n-2ABDE Extract OS            00 (0) 'MS-DOS'\n-2ABDF General Purpose Flag  0800 (2048)\n+2AACA LOCAL HEADER #65      04034B50 (67324752)\n+2AACE Extract Zip Spec      14 (20) '2.0'\n+2AACF Extract OS            00 (0) 'MS-DOS'\n+2AAD0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2ABE1 Compression Method    0008 (8) 'Deflated'\n-2ABE3 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2ABE7 CRC                   42D8FD00 (1121516800)\n-2ABEB Compressed Size       00000038 (56)\n-2ABEF Uncompressed Size     0000003C (60)\n-2ABF3 Filename Length       0038 (56)\n-2ABF5 Extra Length          0000 (0)\n-2ABF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AAD2 Compression Method    0008 (8) 'Deflated'\n+2AAD4 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AAD8 CRC                   42D8FD00 (1121516800)\n+2AADC Compressed Size       00000038 (56)\n+2AAE0 Uncompressed Size     0000003C (60)\n+2AAE4 Filename Length       0038 (56)\n+2AAE6 Extra Length          0000 (0)\n+2AAE8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2ABF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AAE8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2AC2F PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+2AB20 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-2AC67 CENTRAL HEADER #1     02014B50 (33639248)\n-2AC6B Created Zip Spec      14 (20) '2.0'\n-2AC6C Created OS            03 (3) 'Unix'\n-2AC6D Extract Zip Spec      14 (20) '2.0'\n-2AC6E Extract OS            00 (0) 'MS-DOS'\n-2AC6F General Purpose Flag  0800 (2048)\n+2AB58 CENTRAL HEADER #1     02014B50 (33639248)\n+2AB5C Created Zip Spec      14 (20) '2.0'\n+2AB5D Created OS            03 (3) 'Unix'\n+2AB5E Extract Zip Spec      14 (20) '2.0'\n+2AB5F Extract OS            00 (0) 'MS-DOS'\n+2AB60 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2AC71 Compression Method    0008 (8) 'Deflated'\n-2AC73 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AC77 CRC                   A689EB18 (2794056472)\n-2AC7B Compressed Size       00000042 (66)\n-2AC7F Uncompressed Size     00000040 (64)\n-2AC83 Filename Length       0014 (20)\n-2AC85 Extra Length          0000 (0)\n-2AC87 Comment Length        0000 (0)\n-2AC89 Disk Start            0000 (0)\n-2AC8B Int File Attributes   0000 (0)\n+2AB62 Compression Method    0008 (8) 'Deflated'\n+2AB64 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AB68 CRC                   A689EB18 (2794056472)\n+2AB6C Compressed Size       00000042 (66)\n+2AB70 Uncompressed Size     00000040 (64)\n+2AB74 Filename Length       0014 (20)\n+2AB76 Extra Length          0000 (0)\n+2AB78 Comment Length        0000 (0)\n+2AB7A Disk Start            0000 (0)\n+2AB7C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AC8D Ext File Attributes   81A40000 (2175008768)\n+2AB7E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2AC91 Local Header Offset   00000000 (0)\n-2AC95 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+2AB82 Local Header Offset   00000000 (0)\n+2AB86 Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AC95: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AB86: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2ACA9 CENTRAL HEADER #2     02014B50 (33639248)\n-2ACAD Created Zip Spec      14 (20) '2.0'\n-2ACAE Created OS            03 (3) 'Unix'\n-2ACAF Extract Zip Spec      0A (10) '1.0'\n-2ACB0 Extract OS            00 (0) 'MS-DOS'\n-2ACB1 General Purpose Flag  0800 (2048)\n+2AB9A CENTRAL HEADER #2     02014B50 (33639248)\n+2AB9E Created Zip Spec      14 (20) '2.0'\n+2AB9F Created OS            03 (3) 'Unix'\n+2ABA0 Extract Zip Spec      0A (10) '1.0'\n+2ABA1 Extract OS            00 (0) 'MS-DOS'\n+2ABA2 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2ACB3 Compression Method    0000 (0) 'Stored'\n-2ACB5 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2ACB9 CRC                   00000000 (0)\n-2ACBD Compressed Size       00000000 (0)\n-2ACC1 Uncompressed Size     00000000 (0)\n-2ACC5 Filename Length       0009 (9)\n-2ACC7 Extra Length          0000 (0)\n-2ACC9 Comment Length        0000 (0)\n-2ACCB Disk Start            0000 (0)\n-2ACCD Int File Attributes   0000 (0)\n+2ABA4 Compression Method    0000 (0) 'Stored'\n+2ABA6 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2ABAA CRC                   00000000 (0)\n+2ABAE Compressed Size       00000000 (0)\n+2ABB2 Uncompressed Size     00000000 (0)\n+2ABB6 Filename Length       0009 (9)\n+2ABB8 Extra Length          0000 (0)\n+2ABBA Comment Length        0000 (0)\n+2ABBC Disk Start            0000 (0)\n+2ABBE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2ACCF Ext File Attributes   41ED0010 (1106051088)\n+2ABC0 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2ACD3 Local Header Offset   00000074 (116)\n-2ACD7 Filename              'XXXXXXXXX'\n+2ABC4 Local Header Offset   00000074 (116)\n+2ABC8 Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0x2ACD7: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0x2ABC8: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2ACD7: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2ABC8: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2ACAF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0x2ABA0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-2ACE0 CENTRAL HEADER #3     02014B50 (33639248)\n-2ACE4 Created Zip Spec      14 (20) '2.0'\n-2ACE5 Created OS            03 (3) 'Unix'\n-2ACE6 Extract Zip Spec      0A (10) '1.0'\n-2ACE7 Extract OS            00 (0) 'MS-DOS'\n-2ACE8 General Purpose Flag  0800 (2048)\n+2ABD1 CENTRAL HEADER #3     02014B50 (33639248)\n+2ABD5 Created Zip Spec      14 (20) '2.0'\n+2ABD6 Created OS            03 (3) 'Unix'\n+2ABD7 Extract Zip Spec      0A (10) '1.0'\n+2ABD8 Extract OS            00 (0) 'MS-DOS'\n+2ABD9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2ACEA Compression Method    0000 (0) 'Stored'\n-2ACEC Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2ACF0 CRC                   00000000 (0)\n-2ACF4 Compressed Size       00000000 (0)\n-2ACF8 Uncompressed Size     00000000 (0)\n-2ACFC Filename Length       0004 (4)\n-2ACFE Extra Length          0000 (0)\n-2AD00 Comment Length        0000 (0)\n-2AD02 Disk Start            0000 (0)\n-2AD04 Int File Attributes   0000 (0)\n+2ABDB Compression Method    0000 (0) 'Stored'\n+2ABDD Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2ABE1 CRC                   00000000 (0)\n+2ABE5 Compressed Size       00000000 (0)\n+2ABE9 Uncompressed Size     00000000 (0)\n+2ABED Filename Length       0004 (4)\n+2ABEF Extra Length          0000 (0)\n+2ABF1 Comment Length        0000 (0)\n+2ABF3 Disk Start            0000 (0)\n+2ABF5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AD06 Ext File Attributes   41ED0010 (1106051088)\n+2ABF7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AD0A Local Header Offset   0000009B (155)\n-2AD0E Filename              'XXXX'\n+2ABFB Local Header Offset   0000009B (155)\n+2ABFF Filename              'XXXX'\n #\n-# WARNING: Offset 0x2AD0E: Filename 'XXXX'\n+# WARNING: Offset 0x2ABFF: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AD0E: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x2ABFF: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2ACE6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x2ABD7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-2AD12 CENTRAL HEADER #4     02014B50 (33639248)\n-2AD16 Created Zip Spec      14 (20) '2.0'\n-2AD17 Created OS            03 (3) 'Unix'\n-2AD18 Extract Zip Spec      0A (10) '1.0'\n-2AD19 Extract OS            00 (0) 'MS-DOS'\n-2AD1A General Purpose Flag  0800 (2048)\n+2AC03 CENTRAL HEADER #4     02014B50 (33639248)\n+2AC07 Created Zip Spec      14 (20) '2.0'\n+2AC08 Created OS            03 (3) 'Unix'\n+2AC09 Extract Zip Spec      0A (10) '1.0'\n+2AC0A Extract OS            00 (0) 'MS-DOS'\n+2AC0B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AD1C Compression Method    0000 (0) 'Stored'\n-2AD1E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AD22 CRC                   00000000 (0)\n-2AD26 Compressed Size       00000000 (0)\n-2AD2A Uncompressed Size     00000000 (0)\n-2AD2E Filename Length       000F (15)\n-2AD30 Extra Length          0000 (0)\n-2AD32 Comment Length        0000 (0)\n-2AD34 Disk Start            0000 (0)\n-2AD36 Int File Attributes   0000 (0)\n+2AC0D Compression Method    0000 (0) 'Stored'\n+2AC0F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AC13 CRC                   00000000 (0)\n+2AC17 Compressed Size       00000000 (0)\n+2AC1B Uncompressed Size     00000000 (0)\n+2AC1F Filename Length       000F (15)\n+2AC21 Extra Length          0000 (0)\n+2AC23 Comment Length        0000 (0)\n+2AC25 Disk Start            0000 (0)\n+2AC27 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AD38 Ext File Attributes   41ED0010 (1106051088)\n+2AC29 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AD3C Local Header Offset   000000BD (189)\n-2AD40 Filename              'XXXXXXXXXXXXXXX'\n+2AC2D Local Header Offset   000000BD (189)\n+2AC31 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AD40: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AC31: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AD40: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AC31: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AD18: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AC09: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-2AD4F CENTRAL HEADER #5     02014B50 (33639248)\n-2AD53 Created Zip Spec      14 (20) '2.0'\n-2AD54 Created OS            03 (3) 'Unix'\n-2AD55 Extract Zip Spec      0A (10) '1.0'\n-2AD56 Extract OS            00 (0) 'MS-DOS'\n-2AD57 General Purpose Flag  0800 (2048)\n+2AC40 CENTRAL HEADER #5     02014B50 (33639248)\n+2AC44 Created Zip Spec      14 (20) '2.0'\n+2AC45 Created OS            03 (3) 'Unix'\n+2AC46 Extract Zip Spec      0A (10) '1.0'\n+2AC47 Extract OS            00 (0) 'MS-DOS'\n+2AC48 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AD59 Compression Method    0000 (0) 'Stored'\n-2AD5B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AD5F CRC                   00000000 (0)\n-2AD63 Compressed Size       00000000 (0)\n-2AD67 Uncompressed Size     00000000 (0)\n-2AD6B Filename Length       0015 (21)\n-2AD6D Extra Length          0000 (0)\n-2AD6F Comment Length        0000 (0)\n-2AD71 Disk Start            0000 (0)\n-2AD73 Int File Attributes   0000 (0)\n+2AC4A Compression Method    0000 (0) 'Stored'\n+2AC4C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AC50 CRC                   00000000 (0)\n+2AC54 Compressed Size       00000000 (0)\n+2AC58 Uncompressed Size     00000000 (0)\n+2AC5C Filename Length       0015 (21)\n+2AC5E Extra Length          0000 (0)\n+2AC60 Comment Length        0000 (0)\n+2AC62 Disk Start            0000 (0)\n+2AC64 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AD75 Ext File Attributes   41ED0010 (1106051088)\n+2AC66 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AD79 Local Header Offset   000000EA (234)\n-2AD7D Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+2AC6A Local Header Offset   000000EA (234)\n+2AC6E Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AD7D: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AC6E: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AD7D: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AC6E: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AD55: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AC46: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2AD92 CENTRAL HEADER #6     02014B50 (33639248)\n-2AD96 Created Zip Spec      14 (20) '2.0'\n-2AD97 Created OS            03 (3) 'Unix'\n-2AD98 Extract Zip Spec      0A (10) '1.0'\n-2AD99 Extract OS            00 (0) 'MS-DOS'\n-2AD9A General Purpose Flag  0800 (2048)\n+2AC83 CENTRAL HEADER #6     02014B50 (33639248)\n+2AC87 Created Zip Spec      14 (20) '2.0'\n+2AC88 Created OS            03 (3) 'Unix'\n+2AC89 Extract Zip Spec      0A (10) '1.0'\n+2AC8A Extract OS            00 (0) 'MS-DOS'\n+2AC8B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AD9C Compression Method    0000 (0) 'Stored'\n-2AD9E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2ADA2 CRC                   00000000 (0)\n-2ADA6 Compressed Size       00000000 (0)\n-2ADAA Uncompressed Size     00000000 (0)\n-2ADAE Filename Length       001E (30)\n-2ADB0 Extra Length          0000 (0)\n-2ADB2 Comment Length        0000 (0)\n-2ADB4 Disk Start            0000 (0)\n-2ADB6 Int File Attributes   0000 (0)\n+2AC8D Compression Method    0000 (0) 'Stored'\n+2AC8F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AC93 CRC                   00000000 (0)\n+2AC97 Compressed Size       00000000 (0)\n+2AC9B Uncompressed Size     00000000 (0)\n+2AC9F Filename Length       001E (30)\n+2ACA1 Extra Length          0000 (0)\n+2ACA3 Comment Length        0000 (0)\n+2ACA5 Disk Start            0000 (0)\n+2ACA7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2ADB8 Ext File Attributes   41ED0010 (1106051088)\n+2ACA9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2ADBC Local Header Offset   0000011D (285)\n-2ADC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2ACAD Local Header Offset   0000011D (285)\n+2ACB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2ADC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2ACB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2ADC0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2ACB1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AD98: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AC89: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2ADDE CENTRAL HEADER #7     02014B50 (33639248)\n-2ADE2 Created Zip Spec      14 (20) '2.0'\n-2ADE3 Created OS            03 (3) 'Unix'\n-2ADE4 Extract Zip Spec      0A (10) '1.0'\n-2ADE5 Extract OS            00 (0) 'MS-DOS'\n-2ADE6 General Purpose Flag  0800 (2048)\n+2ACCF CENTRAL HEADER #7     02014B50 (33639248)\n+2ACD3 Created Zip Spec      14 (20) '2.0'\n+2ACD4 Created OS            03 (3) 'Unix'\n+2ACD5 Extract Zip Spec      0A (10) '1.0'\n+2ACD6 Extract OS            00 (0) 'MS-DOS'\n+2ACD7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2ADE8 Compression Method    0000 (0) 'Stored'\n-2ADEA Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2ADEE CRC                   00000000 (0)\n-2ADF2 Compressed Size       00000000 (0)\n-2ADF6 Uncompressed Size     00000000 (0)\n-2ADFA Filename Length       0018 (24)\n-2ADFC Extra Length          0000 (0)\n-2ADFE Comment Length        0000 (0)\n-2AE00 Disk Start            0000 (0)\n-2AE02 Int File Attributes   0000 (0)\n+2ACD9 Compression Method    0000 (0) 'Stored'\n+2ACDB Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2ACDF CRC                   00000000 (0)\n+2ACE3 Compressed Size       00000000 (0)\n+2ACE7 Uncompressed Size     00000000 (0)\n+2ACEB Filename Length       0018 (24)\n+2ACED Extra Length          0000 (0)\n+2ACEF Comment Length        0000 (0)\n+2ACF1 Disk Start            0000 (0)\n+2ACF3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AE04 Ext File Attributes   41ED0010 (1106051088)\n+2ACF5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AE08 Local Header Offset   00000159 (345)\n-2AE0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+2ACF9 Local Header Offset   00000159 (345)\n+2ACFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AE0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2ACFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AE0C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2ACFD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2ADE4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2ACD5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2AE24 CENTRAL HEADER #8     02014B50 (33639248)\n-2AE28 Created Zip Spec      14 (20) '2.0'\n-2AE29 Created OS            03 (3) 'Unix'\n-2AE2A Extract Zip Spec      0A (10) '1.0'\n-2AE2B Extract OS            00 (0) 'MS-DOS'\n-2AE2C General Purpose Flag  0800 (2048)\n+2AD15 CENTRAL HEADER #8     02014B50 (33639248)\n+2AD19 Created Zip Spec      14 (20) '2.0'\n+2AD1A Created OS            03 (3) 'Unix'\n+2AD1B Extract Zip Spec      0A (10) '1.0'\n+2AD1C Extract OS            00 (0) 'MS-DOS'\n+2AD1D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AE2E Compression Method    0000 (0) 'Stored'\n-2AE30 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AE34 CRC                   00000000 (0)\n-2AE38 Compressed Size       00000000 (0)\n-2AE3C Uncompressed Size     00000000 (0)\n-2AE40 Filename Length       0016 (22)\n-2AE42 Extra Length          0000 (0)\n-2AE44 Comment Length        0000 (0)\n-2AE46 Disk Start            0000 (0)\n-2AE48 Int File Attributes   0000 (0)\n+2AD1F Compression Method    0000 (0) 'Stored'\n+2AD21 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AD25 CRC                   00000000 (0)\n+2AD29 Compressed Size       00000000 (0)\n+2AD2D Uncompressed Size     00000000 (0)\n+2AD31 Filename Length       0016 (22)\n+2AD33 Extra Length          0000 (0)\n+2AD35 Comment Length        0000 (0)\n+2AD37 Disk Start            0000 (0)\n+2AD39 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AE4A Ext File Attributes   41ED0010 (1106051088)\n+2AD3B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AE4E Local Header Offset   0000018F (399)\n-2AE52 Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n+2AD3F Local Header Offset   0000018F (399)\n+2AD43 Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AE52: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AD43: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AE52: Directory 'XXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AD43: Directory 'XXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AE2A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AD1B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2AE68 CENTRAL HEADER #9     02014B50 (33639248)\n-2AE6C Created Zip Spec      14 (20) '2.0'\n-2AE6D Created OS            03 (3) 'Unix'\n-2AE6E Extract Zip Spec      0A (10) '1.0'\n-2AE6F Extract OS            00 (0) 'MS-DOS'\n-2AE70 General Purpose Flag  0800 (2048)\n+2AD59 CENTRAL HEADER #9     02014B50 (33639248)\n+2AD5D Created Zip Spec      14 (20) '2.0'\n+2AD5E Created OS            03 (3) 'Unix'\n+2AD5F Extract Zip Spec      0A (10) '1.0'\n+2AD60 Extract OS            00 (0) 'MS-DOS'\n+2AD61 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AE72 Compression Method    0000 (0) 'Stored'\n-2AE74 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AE78 CRC                   00000000 (0)\n-2AE7C Compressed Size       00000000 (0)\n-2AE80 Uncompressed Size     00000000 (0)\n-2AE84 Filename Length       001C (28)\n-2AE86 Extra Length          0000 (0)\n-2AE88 Comment Length        0000 (0)\n-2AE8A Disk Start            0000 (0)\n-2AE8C Int File Attributes   0000 (0)\n+2AD63 Compression Method    0000 (0) 'Stored'\n+2AD65 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AD69 CRC                   00000000 (0)\n+2AD6D Compressed Size       00000000 (0)\n+2AD71 Uncompressed Size     00000000 (0)\n+2AD75 Filename Length       001C (28)\n+2AD77 Extra Length          0000 (0)\n+2AD79 Comment Length        0000 (0)\n+2AD7B Disk Start            0000 (0)\n+2AD7D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AE8E Ext File Attributes   41ED0010 (1106051088)\n+2AD7F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AE92 Local Header Offset   000001C3 (451)\n-2AE96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AD83 Local Header Offset   000001C3 (451)\n+2AD87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AE96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AD87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AE96: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AD87: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AE6E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AD5F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2AEB2 CENTRAL HEADER #10    02014B50 (33639248)\n-2AEB6 Created Zip Spec      14 (20) '2.0'\n-2AEB7 Created OS            03 (3) 'Unix'\n-2AEB8 Extract Zip Spec      0A (10) '1.0'\n-2AEB9 Extract OS            00 (0) 'MS-DOS'\n-2AEBA General Purpose Flag  0800 (2048)\n+2ADA3 CENTRAL HEADER #10    02014B50 (33639248)\n+2ADA7 Created Zip Spec      14 (20) '2.0'\n+2ADA8 Created OS            03 (3) 'Unix'\n+2ADA9 Extract Zip Spec      0A (10) '1.0'\n+2ADAA Extract OS            00 (0) 'MS-DOS'\n+2ADAB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AEBC Compression Method    0000 (0) 'Stored'\n-2AEBE Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AEC2 CRC                   00000000 (0)\n-2AEC6 Compressed Size       00000000 (0)\n-2AECA Uncompressed Size     00000000 (0)\n-2AECE Filename Length       0025 (37)\n-2AED0 Extra Length          0000 (0)\n-2AED2 Comment Length        0000 (0)\n-2AED4 Disk Start            0000 (0)\n-2AED6 Int File Attributes   0000 (0)\n+2ADAD Compression Method    0000 (0) 'Stored'\n+2ADAF Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2ADB3 CRC                   00000000 (0)\n+2ADB7 Compressed Size       00000000 (0)\n+2ADBB Uncompressed Size     00000000 (0)\n+2ADBF Filename Length       0025 (37)\n+2ADC1 Extra Length          0000 (0)\n+2ADC3 Comment Length        0000 (0)\n+2ADC5 Disk Start            0000 (0)\n+2ADC7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AED8 Ext File Attributes   41ED0010 (1106051088)\n+2ADC9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AEDC Local Header Offset   000001FD (509)\n-2AEE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2ADCD Local Header Offset   000001FD (509)\n+2ADD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AEE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2ADD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AEE0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2ADD1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AEB8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2ADA9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2AF05 CENTRAL HEADER #11    02014B50 (33639248)\n-2AF09 Created Zip Spec      14 (20) '2.0'\n-2AF0A Created OS            03 (3) 'Unix'\n-2AF0B Extract Zip Spec      0A (10) '1.0'\n-2AF0C Extract OS            00 (0) 'MS-DOS'\n-2AF0D General Purpose Flag  0800 (2048)\n+2ADF6 CENTRAL HEADER #11    02014B50 (33639248)\n+2ADFA Created Zip Spec      14 (20) '2.0'\n+2ADFB Created OS            03 (3) 'Unix'\n+2ADFC Extract Zip Spec      0A (10) '1.0'\n+2ADFD Extract OS            00 (0) 'MS-DOS'\n+2ADFE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AF0F Compression Method    0000 (0) 'Stored'\n-2AF11 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AF15 CRC                   00000000 (0)\n-2AF19 Compressed Size       00000000 (0)\n-2AF1D Uncompressed Size     00000000 (0)\n-2AF21 Filename Length       002D (45)\n-2AF23 Extra Length          0000 (0)\n-2AF25 Comment Length        0000 (0)\n-2AF27 Disk Start            0000 (0)\n-2AF29 Int File Attributes   0000 (0)\n+2AE00 Compression Method    0000 (0) 'Stored'\n+2AE02 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AE06 CRC                   00000000 (0)\n+2AE0A Compressed Size       00000000 (0)\n+2AE0E Uncompressed Size     00000000 (0)\n+2AE12 Filename Length       002D (45)\n+2AE14 Extra Length          0000 (0)\n+2AE16 Comment Length        0000 (0)\n+2AE18 Disk Start            0000 (0)\n+2AE1A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AF2B Ext File Attributes   41ED0010 (1106051088)\n+2AE1C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AF2F Local Header Offset   00000240 (576)\n-2AF33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AE20 Local Header Offset   00000240 (576)\n+2AE24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AF33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AE24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AF33: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AE24: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AF0B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2ADFC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2AF60 CENTRAL HEADER #12    02014B50 (33639248)\n-2AF64 Created Zip Spec      14 (20) '2.0'\n-2AF65 Created OS            03 (3) 'Unix'\n-2AF66 Extract Zip Spec      0A (10) '1.0'\n-2AF67 Extract OS            00 (0) 'MS-DOS'\n-2AF68 General Purpose Flag  0800 (2048)\n+2AE51 CENTRAL HEADER #12    02014B50 (33639248)\n+2AE55 Created Zip Spec      14 (20) '2.0'\n+2AE56 Created OS            03 (3) 'Unix'\n+2AE57 Extract Zip Spec      0A (10) '1.0'\n+2AE58 Extract OS            00 (0) 'MS-DOS'\n+2AE59 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AF6A Compression Method    0000 (0) 'Stored'\n-2AF6C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AF70 CRC                   00000000 (0)\n-2AF74 Compressed Size       00000000 (0)\n-2AF78 Uncompressed Size     00000000 (0)\n-2AF7C Filename Length       0031 (49)\n-2AF7E Extra Length          0000 (0)\n-2AF80 Comment Length        0000 (0)\n-2AF82 Disk Start            0000 (0)\n-2AF84 Int File Attributes   0000 (0)\n+2AE5B Compression Method    0000 (0) 'Stored'\n+2AE5D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AE61 CRC                   00000000 (0)\n+2AE65 Compressed Size       00000000 (0)\n+2AE69 Uncompressed Size     00000000 (0)\n+2AE6D Filename Length       0031 (49)\n+2AE6F Extra Length          0000 (0)\n+2AE71 Comment Length        0000 (0)\n+2AE73 Disk Start            0000 (0)\n+2AE75 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AF86 Ext File Attributes   41ED0010 (1106051088)\n+2AE77 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AF8A Local Header Offset   0000028B (651)\n-2AF8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AE7B Local Header Offset   0000028B (651)\n+2AE7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AF8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AE7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AF8E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AE7F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AF66: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AE57: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2AFBF CENTRAL HEADER #13    02014B50 (33639248)\n-2AFC3 Created Zip Spec      14 (20) '2.0'\n-2AFC4 Created OS            03 (3) 'Unix'\n-2AFC5 Extract Zip Spec      0A (10) '1.0'\n-2AFC6 Extract OS            00 (0) 'MS-DOS'\n-2AFC7 General Purpose Flag  0800 (2048)\n+2AEB0 CENTRAL HEADER #13    02014B50 (33639248)\n+2AEB4 Created Zip Spec      14 (20) '2.0'\n+2AEB5 Created OS            03 (3) 'Unix'\n+2AEB6 Extract Zip Spec      0A (10) '1.0'\n+2AEB7 Extract OS            00 (0) 'MS-DOS'\n+2AEB8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2AFC9 Compression Method    0000 (0) 'Stored'\n-2AFCB Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2AFCF CRC                   00000000 (0)\n-2AFD3 Compressed Size       00000000 (0)\n-2AFD7 Uncompressed Size     00000000 (0)\n-2AFDB Filename Length       0034 (52)\n-2AFDD Extra Length          0000 (0)\n-2AFDF Comment Length        0000 (0)\n-2AFE1 Disk Start            0000 (0)\n-2AFE3 Int File Attributes   0000 (0)\n+2AEBA Compression Method    0000 (0) 'Stored'\n+2AEBC Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AEC0 CRC                   00000000 (0)\n+2AEC4 Compressed Size       00000000 (0)\n+2AEC8 Uncompressed Size     00000000 (0)\n+2AECC Filename Length       0034 (52)\n+2AECE Extra Length          0000 (0)\n+2AED0 Comment Length        0000 (0)\n+2AED2 Disk Start            0000 (0)\n+2AED4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2AFE5 Ext File Attributes   41ED0010 (1106051088)\n+2AED6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2AFE9 Local Header Offset   000002DA (730)\n-2AFED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AEDA Local Header Offset   000002DA (730)\n+2AEDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2AFED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AEDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2AFED: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AEDE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2AFC5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AEB6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B021 CENTRAL HEADER #14    02014B50 (33639248)\n-2B025 Created Zip Spec      14 (20) '2.0'\n-2B026 Created OS            03 (3) 'Unix'\n-2B027 Extract Zip Spec      0A (10) '1.0'\n-2B028 Extract OS            00 (0) 'MS-DOS'\n-2B029 General Purpose Flag  0800 (2048)\n+2AF12 CENTRAL HEADER #14    02014B50 (33639248)\n+2AF16 Created Zip Spec      14 (20) '2.0'\n+2AF17 Created OS            03 (3) 'Unix'\n+2AF18 Extract Zip Spec      0A (10) '1.0'\n+2AF19 Extract OS            00 (0) 'MS-DOS'\n+2AF1A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B02B Compression Method    0000 (0) 'Stored'\n-2B02D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B031 CRC                   00000000 (0)\n-2B035 Compressed Size       00000000 (0)\n-2B039 Uncompressed Size     00000000 (0)\n-2B03D Filename Length       002B (43)\n-2B03F Extra Length          0000 (0)\n-2B041 Comment Length        0000 (0)\n-2B043 Disk Start            0000 (0)\n-2B045 Int File Attributes   0000 (0)\n+2AF1C Compression Method    0000 (0) 'Stored'\n+2AF1E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AF22 CRC                   00000000 (0)\n+2AF26 Compressed Size       00000000 (0)\n+2AF2A Uncompressed Size     00000000 (0)\n+2AF2E Filename Length       002B (43)\n+2AF30 Extra Length          0000 (0)\n+2AF32 Comment Length        0000 (0)\n+2AF34 Disk Start            0000 (0)\n+2AF36 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B047 Ext File Attributes   41ED0010 (1106051088)\n+2AF38 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B04B Local Header Offset   0000032C (812)\n-2B04F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AF3C Local Header Offset   0000032C (812)\n+2AF40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B04F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AF40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B04F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AF40: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B027: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AF18: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B07A CENTRAL HEADER #15    02014B50 (33639248)\n-2B07E Created Zip Spec      14 (20) '2.0'\n-2B07F Created OS            03 (3) 'Unix'\n-2B080 Extract Zip Spec      0A (10) '1.0'\n-2B081 Extract OS            00 (0) 'MS-DOS'\n-2B082 General Purpose Flag  0800 (2048)\n+2AF6B CENTRAL HEADER #15    02014B50 (33639248)\n+2AF6F Created Zip Spec      14 (20) '2.0'\n+2AF70 Created OS            03 (3) 'Unix'\n+2AF71 Extract Zip Spec      0A (10) '1.0'\n+2AF72 Extract OS            00 (0) 'MS-DOS'\n+2AF73 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B084 Compression Method    0000 (0) 'Stored'\n-2B086 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B08A CRC                   00000000 (0)\n-2B08E Compressed Size       00000000 (0)\n-2B092 Uncompressed Size     00000000 (0)\n-2B096 Filename Length       002F (47)\n-2B098 Extra Length          0000 (0)\n-2B09A Comment Length        0000 (0)\n-2B09C Disk Start            0000 (0)\n-2B09E Int File Attributes   0000 (0)\n+2AF75 Compression Method    0000 (0) 'Stored'\n+2AF77 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AF7B CRC                   00000000 (0)\n+2AF7F Compressed Size       00000000 (0)\n+2AF83 Uncompressed Size     00000000 (0)\n+2AF87 Filename Length       002F (47)\n+2AF89 Extra Length          0000 (0)\n+2AF8B Comment Length        0000 (0)\n+2AF8D Disk Start            0000 (0)\n+2AF8F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B0A0 Ext File Attributes   41ED0010 (1106051088)\n+2AF91 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B0A4 Local Header Offset   00000375 (885)\n-2B0A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AF95 Local Header Offset   00000375 (885)\n+2AF99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B0A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AF99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B0A8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AF99: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B080: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AF71: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B0D7 CENTRAL HEADER #16    02014B50 (33639248)\n-2B0DB Created Zip Spec      14 (20) '2.0'\n-2B0DC Created OS            03 (3) 'Unix'\n-2B0DD Extract Zip Spec      0A (10) '1.0'\n-2B0DE Extract OS            00 (0) 'MS-DOS'\n-2B0DF General Purpose Flag  0800 (2048)\n+2AFC8 CENTRAL HEADER #16    02014B50 (33639248)\n+2AFCC Created Zip Spec      14 (20) '2.0'\n+2AFCD Created OS            03 (3) 'Unix'\n+2AFCE Extract Zip Spec      0A (10) '1.0'\n+2AFCF Extract OS            00 (0) 'MS-DOS'\n+2AFD0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B0E1 Compression Method    0000 (0) 'Stored'\n-2B0E3 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B0E7 CRC                   00000000 (0)\n-2B0EB Compressed Size       00000000 (0)\n-2B0EF Uncompressed Size     00000000 (0)\n-2B0F3 Filename Length       0031 (49)\n-2B0F5 Extra Length          0000 (0)\n-2B0F7 Comment Length        0000 (0)\n-2B0F9 Disk Start            0000 (0)\n-2B0FB Int File Attributes   0000 (0)\n+2AFD2 Compression Method    0000 (0) 'Stored'\n+2AFD4 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2AFD8 CRC                   00000000 (0)\n+2AFDC Compressed Size       00000000 (0)\n+2AFE0 Uncompressed Size     00000000 (0)\n+2AFE4 Filename Length       0031 (49)\n+2AFE6 Extra Length          0000 (0)\n+2AFE8 Comment Length        0000 (0)\n+2AFEA Disk Start            0000 (0)\n+2AFEC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B0FD Ext File Attributes   41ED0010 (1106051088)\n+2AFEE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B101 Local Header Offset   000003C2 (962)\n-2B105 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2AFF2 Local Header Offset   000003C2 (962)\n+2AFF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B105: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AFF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B105: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2AFF6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B0DD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AFCE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B136 CENTRAL HEADER #17    02014B50 (33639248)\n-2B13A Created Zip Spec      14 (20) '2.0'\n-2B13B Created OS            03 (3) 'Unix'\n-2B13C Extract Zip Spec      0A (10) '1.0'\n-2B13D Extract OS            00 (0) 'MS-DOS'\n-2B13E General Purpose Flag  0800 (2048)\n+2B027 CENTRAL HEADER #17    02014B50 (33639248)\n+2B02B Created Zip Spec      14 (20) '2.0'\n+2B02C Created OS            03 (3) 'Unix'\n+2B02D Extract Zip Spec      0A (10) '1.0'\n+2B02E Extract OS            00 (0) 'MS-DOS'\n+2B02F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B140 Compression Method    0000 (0) 'Stored'\n-2B142 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B146 CRC                   00000000 (0)\n-2B14A Compressed Size       00000000 (0)\n-2B14E Uncompressed Size     00000000 (0)\n-2B152 Filename Length       0031 (49)\n-2B154 Extra Length          0000 (0)\n-2B156 Comment Length        0000 (0)\n-2B158 Disk Start            0000 (0)\n-2B15A Int File Attributes   0000 (0)\n+2B031 Compression Method    0000 (0) 'Stored'\n+2B033 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B037 CRC                   00000000 (0)\n+2B03B Compressed Size       00000000 (0)\n+2B03F Uncompressed Size     00000000 (0)\n+2B043 Filename Length       0031 (49)\n+2B045 Extra Length          0000 (0)\n+2B047 Comment Length        0000 (0)\n+2B049 Disk Start            0000 (0)\n+2B04B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B15C Ext File Attributes   41ED0010 (1106051088)\n+2B04D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B160 Local Header Offset   00000411 (1041)\n-2B164 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B051 Local Header Offset   00000411 (1041)\n+2B055 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B164: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B055: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B164: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B055: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B13C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B02D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B195 CENTRAL HEADER #18    02014B50 (33639248)\n-2B199 Created Zip Spec      14 (20) '2.0'\n-2B19A Created OS            03 (3) 'Unix'\n-2B19B Extract Zip Spec      0A (10) '1.0'\n-2B19C Extract OS            00 (0) 'MS-DOS'\n-2B19D General Purpose Flag  0800 (2048)\n+2B086 CENTRAL HEADER #18    02014B50 (33639248)\n+2B08A Created Zip Spec      14 (20) '2.0'\n+2B08B Created OS            03 (3) 'Unix'\n+2B08C Extract Zip Spec      0A (10) '1.0'\n+2B08D Extract OS            00 (0) 'MS-DOS'\n+2B08E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B19F Compression Method    0000 (0) 'Stored'\n-2B1A1 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B1A5 CRC                   00000000 (0)\n-2B1A9 Compressed Size       00000000 (0)\n-2B1AD Uncompressed Size     00000000 (0)\n-2B1B1 Filename Length       0031 (49)\n-2B1B3 Extra Length          0000 (0)\n-2B1B5 Comment Length        0000 (0)\n-2B1B7 Disk Start            0000 (0)\n-2B1B9 Int File Attributes   0000 (0)\n+2B090 Compression Method    0000 (0) 'Stored'\n+2B092 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B096 CRC                   00000000 (0)\n+2B09A Compressed Size       00000000 (0)\n+2B09E Uncompressed Size     00000000 (0)\n+2B0A2 Filename Length       0031 (49)\n+2B0A4 Extra Length          0000 (0)\n+2B0A6 Comment Length        0000 (0)\n+2B0A8 Disk Start            0000 (0)\n+2B0AA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B1BB Ext File Attributes   41ED0010 (1106051088)\n+2B0AC Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B1BF Local Header Offset   00000460 (1120)\n-2B1C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B0B0 Local Header Offset   00000460 (1120)\n+2B0B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B1C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B0B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B1C3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B0B4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B19B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B08C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B1F4 CENTRAL HEADER #19    02014B50 (33639248)\n-2B1F8 Created Zip Spec      14 (20) '2.0'\n-2B1F9 Created OS            03 (3) 'Unix'\n-2B1FA Extract Zip Spec      0A (10) '1.0'\n-2B1FB Extract OS            00 (0) 'MS-DOS'\n-2B1FC General Purpose Flag  0800 (2048)\n+2B0E5 CENTRAL HEADER #19    02014B50 (33639248)\n+2B0E9 Created Zip Spec      14 (20) '2.0'\n+2B0EA Created OS            03 (3) 'Unix'\n+2B0EB Extract Zip Spec      0A (10) '1.0'\n+2B0EC Extract OS            00 (0) 'MS-DOS'\n+2B0ED General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B1FE Compression Method    0000 (0) 'Stored'\n-2B200 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B204 CRC                   00000000 (0)\n-2B208 Compressed Size       00000000 (0)\n-2B20C Uncompressed Size     00000000 (0)\n-2B210 Filename Length       002F (47)\n-2B212 Extra Length          0000 (0)\n-2B214 Comment Length        0000 (0)\n-2B216 Disk Start            0000 (0)\n-2B218 Int File Attributes   0000 (0)\n+2B0EF Compression Method    0000 (0) 'Stored'\n+2B0F1 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B0F5 CRC                   00000000 (0)\n+2B0F9 Compressed Size       00000000 (0)\n+2B0FD Uncompressed Size     00000000 (0)\n+2B101 Filename Length       002F (47)\n+2B103 Extra Length          0000 (0)\n+2B105 Comment Length        0000 (0)\n+2B107 Disk Start            0000 (0)\n+2B109 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B21A Ext File Attributes   41ED0010 (1106051088)\n+2B10B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B21E Local Header Offset   000004AF (1199)\n-2B222 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B10F Local Header Offset   000004AF (1199)\n+2B113 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B222: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B113: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B222: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B113: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B1FA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B0EB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B251 CENTRAL HEADER #20    02014B50 (33639248)\n-2B255 Created Zip Spec      14 (20) '2.0'\n-2B256 Created OS            03 (3) 'Unix'\n-2B257 Extract Zip Spec      0A (10) '1.0'\n-2B258 Extract OS            00 (0) 'MS-DOS'\n-2B259 General Purpose Flag  0800 (2048)\n+2B142 CENTRAL HEADER #20    02014B50 (33639248)\n+2B146 Created Zip Spec      14 (20) '2.0'\n+2B147 Created OS            03 (3) 'Unix'\n+2B148 Extract Zip Spec      0A (10) '1.0'\n+2B149 Extract OS            00 (0) 'MS-DOS'\n+2B14A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B25B Compression Method    0000 (0) 'Stored'\n-2B25D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B261 CRC                   00000000 (0)\n-2B265 Compressed Size       00000000 (0)\n-2B269 Uncompressed Size     00000000 (0)\n-2B26D Filename Length       0032 (50)\n-2B26F Extra Length          0000 (0)\n-2B271 Comment Length        0000 (0)\n-2B273 Disk Start            0000 (0)\n-2B275 Int File Attributes   0000 (0)\n+2B14C Compression Method    0000 (0) 'Stored'\n+2B14E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B152 CRC                   00000000 (0)\n+2B156 Compressed Size       00000000 (0)\n+2B15A Uncompressed Size     00000000 (0)\n+2B15E Filename Length       0032 (50)\n+2B160 Extra Length          0000 (0)\n+2B162 Comment Length        0000 (0)\n+2B164 Disk Start            0000 (0)\n+2B166 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B277 Ext File Attributes   41ED0010 (1106051088)\n+2B168 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B27B Local Header Offset   000004FC (1276)\n-2B27F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B16C Local Header Offset   000004FC (1276)\n+2B170 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B27F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B170: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B27F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B170: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B257: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B148: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B2B1 CENTRAL HEADER #21    02014B50 (33639248)\n-2B2B5 Created Zip Spec      14 (20) '2.0'\n-2B2B6 Created OS            03 (3) 'Unix'\n-2B2B7 Extract Zip Spec      0A (10) '1.0'\n-2B2B8 Extract OS            00 (0) 'MS-DOS'\n-2B2B9 General Purpose Flag  0800 (2048)\n+2B1A2 CENTRAL HEADER #21    02014B50 (33639248)\n+2B1A6 Created Zip Spec      14 (20) '2.0'\n+2B1A7 Created OS            03 (3) 'Unix'\n+2B1A8 Extract Zip Spec      0A (10) '1.0'\n+2B1A9 Extract OS            00 (0) 'MS-DOS'\n+2B1AA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B2BB Compression Method    0000 (0) 'Stored'\n-2B2BD Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B2C1 CRC                   00000000 (0)\n-2B2C5 Compressed Size       00000000 (0)\n-2B2C9 Uncompressed Size     00000000 (0)\n-2B2CD Filename Length       0029 (41)\n-2B2CF Extra Length          0000 (0)\n-2B2D1 Comment Length        0000 (0)\n-2B2D3 Disk Start            0000 (0)\n-2B2D5 Int File Attributes   0000 (0)\n+2B1AC Compression Method    0000 (0) 'Stored'\n+2B1AE Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B1B2 CRC                   00000000 (0)\n+2B1B6 Compressed Size       00000000 (0)\n+2B1BA Uncompressed Size     00000000 (0)\n+2B1BE Filename Length       0029 (41)\n+2B1C0 Extra Length          0000 (0)\n+2B1C2 Comment Length        0000 (0)\n+2B1C4 Disk Start            0000 (0)\n+2B1C6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B2D7 Ext File Attributes   41ED0010 (1106051088)\n+2B1C8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B2DB Local Header Offset   0000054C (1356)\n-2B2DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B1CC Local Header Offset   0000054C (1356)\n+2B1D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B2DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B1D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B2DF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B1D0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B2B7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B1A8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B308 CENTRAL HEADER #22    02014B50 (33639248)\n-2B30C Created Zip Spec      14 (20) '2.0'\n-2B30D Created OS            03 (3) 'Unix'\n-2B30E Extract Zip Spec      0A (10) '1.0'\n-2B30F Extract OS            00 (0) 'MS-DOS'\n-2B310 General Purpose Flag  0800 (2048)\n+2B1F9 CENTRAL HEADER #22    02014B50 (33639248)\n+2B1FD Created Zip Spec      14 (20) '2.0'\n+2B1FE Created OS            03 (3) 'Unix'\n+2B1FF Extract Zip Spec      0A (10) '1.0'\n+2B200 Extract OS            00 (0) 'MS-DOS'\n+2B201 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B312 Compression Method    0000 (0) 'Stored'\n-2B314 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B318 CRC                   00000000 (0)\n-2B31C Compressed Size       00000000 (0)\n-2B320 Uncompressed Size     00000000 (0)\n-2B324 Filename Length       002D (45)\n-2B326 Extra Length          0000 (0)\n-2B328 Comment Length        0000 (0)\n-2B32A Disk Start            0000 (0)\n-2B32C Int File Attributes   0000 (0)\n+2B203 Compression Method    0000 (0) 'Stored'\n+2B205 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B209 CRC                   00000000 (0)\n+2B20D Compressed Size       00000000 (0)\n+2B211 Uncompressed Size     00000000 (0)\n+2B215 Filename Length       002D (45)\n+2B217 Extra Length          0000 (0)\n+2B219 Comment Length        0000 (0)\n+2B21B Disk Start            0000 (0)\n+2B21D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B32E Ext File Attributes   41ED0010 (1106051088)\n+2B21F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B332 Local Header Offset   00000593 (1427)\n-2B336 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B223 Local Header Offset   00000593 (1427)\n+2B227 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B336: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B227: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B336: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B227: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B30E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B1FF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B363 CENTRAL HEADER #23    02014B50 (33639248)\n-2B367 Created Zip Spec      14 (20) '2.0'\n-2B368 Created OS            03 (3) 'Unix'\n-2B369 Extract Zip Spec      0A (10) '1.0'\n-2B36A Extract OS            00 (0) 'MS-DOS'\n-2B36B General Purpose Flag  0800 (2048)\n+2B254 CENTRAL HEADER #23    02014B50 (33639248)\n+2B258 Created Zip Spec      14 (20) '2.0'\n+2B259 Created OS            03 (3) 'Unix'\n+2B25A Extract Zip Spec      0A (10) '1.0'\n+2B25B Extract OS            00 (0) 'MS-DOS'\n+2B25C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B36D Compression Method    0000 (0) 'Stored'\n-2B36F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B373 CRC                   00000000 (0)\n-2B377 Compressed Size       00000000 (0)\n-2B37B Uncompressed Size     00000000 (0)\n-2B37F Filename Length       0030 (48)\n-2B381 Extra Length          0000 (0)\n-2B383 Comment Length        0000 (0)\n-2B385 Disk Start            0000 (0)\n-2B387 Int File Attributes   0000 (0)\n+2B25E Compression Method    0000 (0) 'Stored'\n+2B260 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B264 CRC                   00000000 (0)\n+2B268 Compressed Size       00000000 (0)\n+2B26C Uncompressed Size     00000000 (0)\n+2B270 Filename Length       0030 (48)\n+2B272 Extra Length          0000 (0)\n+2B274 Comment Length        0000 (0)\n+2B276 Disk Start            0000 (0)\n+2B278 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B389 Ext File Attributes   41ED0010 (1106051088)\n+2B27A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B38D Local Header Offset   000005DE (1502)\n-2B391 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B27E Local Header Offset   000005DE (1502)\n+2B282 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B391: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B282: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B391: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B282: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B369: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B25A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B3C1 CENTRAL HEADER #24    02014B50 (33639248)\n-2B3C5 Created Zip Spec      14 (20) '2.0'\n-2B3C6 Created OS            03 (3) 'Unix'\n-2B3C7 Extract Zip Spec      0A (10) '1.0'\n-2B3C8 Extract OS            00 (0) 'MS-DOS'\n-2B3C9 General Purpose Flag  0800 (2048)\n+2B2B2 CENTRAL HEADER #24    02014B50 (33639248)\n+2B2B6 Created Zip Spec      14 (20) '2.0'\n+2B2B7 Created OS            03 (3) 'Unix'\n+2B2B8 Extract Zip Spec      0A (10) '1.0'\n+2B2B9 Extract OS            00 (0) 'MS-DOS'\n+2B2BA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B3CB Compression Method    0000 (0) 'Stored'\n-2B3CD Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B3D1 CRC                   00000000 (0)\n-2B3D5 Compressed Size       00000000 (0)\n-2B3D9 Uncompressed Size     00000000 (0)\n-2B3DD Filename Length       002D (45)\n-2B3DF Extra Length          0000 (0)\n-2B3E1 Comment Length        0000 (0)\n-2B3E3 Disk Start            0000 (0)\n-2B3E5 Int File Attributes   0000 (0)\n+2B2BC Compression Method    0000 (0) 'Stored'\n+2B2BE Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B2C2 CRC                   00000000 (0)\n+2B2C6 Compressed Size       00000000 (0)\n+2B2CA Uncompressed Size     00000000 (0)\n+2B2CE Filename Length       002D (45)\n+2B2D0 Extra Length          0000 (0)\n+2B2D2 Comment Length        0000 (0)\n+2B2D4 Disk Start            0000 (0)\n+2B2D6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B3E7 Ext File Attributes   41ED0010 (1106051088)\n+2B2D8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B3EB Local Header Offset   0000062C (1580)\n-2B3EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B2DC Local Header Offset   0000062C (1580)\n+2B2E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B3EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B2E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B3EF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B2E0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B3C7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B2B8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B41C CENTRAL HEADER #25    02014B50 (33639248)\n-2B420 Created Zip Spec      14 (20) '2.0'\n-2B421 Created OS            03 (3) 'Unix'\n-2B422 Extract Zip Spec      0A (10) '1.0'\n-2B423 Extract OS            00 (0) 'MS-DOS'\n-2B424 General Purpose Flag  0800 (2048)\n+2B30D CENTRAL HEADER #25    02014B50 (33639248)\n+2B311 Created Zip Spec      14 (20) '2.0'\n+2B312 Created OS            03 (3) 'Unix'\n+2B313 Extract Zip Spec      0A (10) '1.0'\n+2B314 Extract OS            00 (0) 'MS-DOS'\n+2B315 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B426 Compression Method    0000 (0) 'Stored'\n-2B428 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B42C CRC                   00000000 (0)\n-2B430 Compressed Size       00000000 (0)\n-2B434 Uncompressed Size     00000000 (0)\n-2B438 Filename Length       0031 (49)\n-2B43A Extra Length          0000 (0)\n-2B43C Comment Length        0000 (0)\n-2B43E Disk Start            0000 (0)\n-2B440 Int File Attributes   0000 (0)\n+2B317 Compression Method    0000 (0) 'Stored'\n+2B319 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B31D CRC                   00000000 (0)\n+2B321 Compressed Size       00000000 (0)\n+2B325 Uncompressed Size     00000000 (0)\n+2B329 Filename Length       0031 (49)\n+2B32B Extra Length          0000 (0)\n+2B32D Comment Length        0000 (0)\n+2B32F Disk Start            0000 (0)\n+2B331 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B442 Ext File Attributes   41ED0010 (1106051088)\n+2B333 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B446 Local Header Offset   00000677 (1655)\n-2B44A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B337 Local Header Offset   00000677 (1655)\n+2B33B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B44A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B33B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B44A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B33B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B422: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B313: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B47B CENTRAL HEADER #26    02014B50 (33639248)\n-2B47F Created Zip Spec      14 (20) '2.0'\n-2B480 Created OS            03 (3) 'Unix'\n-2B481 Extract Zip Spec      0A (10) '1.0'\n-2B482 Extract OS            00 (0) 'MS-DOS'\n-2B483 General Purpose Flag  0800 (2048)\n+2B36C CENTRAL HEADER #26    02014B50 (33639248)\n+2B370 Created Zip Spec      14 (20) '2.0'\n+2B371 Created OS            03 (3) 'Unix'\n+2B372 Extract Zip Spec      0A (10) '1.0'\n+2B373 Extract OS            00 (0) 'MS-DOS'\n+2B374 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B485 Compression Method    0000 (0) 'Stored'\n-2B487 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B48B CRC                   00000000 (0)\n-2B48F Compressed Size       00000000 (0)\n-2B493 Uncompressed Size     00000000 (0)\n-2B497 Filename Length       0034 (52)\n-2B499 Extra Length          0000 (0)\n-2B49B Comment Length        0000 (0)\n-2B49D Disk Start            0000 (0)\n-2B49F Int File Attributes   0000 (0)\n+2B376 Compression Method    0000 (0) 'Stored'\n+2B378 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B37C CRC                   00000000 (0)\n+2B380 Compressed Size       00000000 (0)\n+2B384 Uncompressed Size     00000000 (0)\n+2B388 Filename Length       0034 (52)\n+2B38A Extra Length          0000 (0)\n+2B38C Comment Length        0000 (0)\n+2B38E Disk Start            0000 (0)\n+2B390 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B4A1 Ext File Attributes   41ED0010 (1106051088)\n+2B392 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B4A5 Local Header Offset   000006C6 (1734)\n-2B4A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B396 Local Header Offset   000006C6 (1734)\n+2B39A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B4A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B39A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B4A9: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B39A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B481: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B372: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B4DD CENTRAL HEADER #27    02014B50 (33639248)\n-2B4E1 Created Zip Spec      14 (20) '2.0'\n-2B4E2 Created OS            03 (3) 'Unix'\n-2B4E3 Extract Zip Spec      0A (10) '1.0'\n-2B4E4 Extract OS            00 (0) 'MS-DOS'\n-2B4E5 General Purpose Flag  0800 (2048)\n+2B3CE CENTRAL HEADER #27    02014B50 (33639248)\n+2B3D2 Created Zip Spec      14 (20) '2.0'\n+2B3D3 Created OS            03 (3) 'Unix'\n+2B3D4 Extract Zip Spec      0A (10) '1.0'\n+2B3D5 Extract OS            00 (0) 'MS-DOS'\n+2B3D6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B4E7 Compression Method    0000 (0) 'Stored'\n-2B4E9 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B4ED CRC                   00000000 (0)\n-2B4F1 Compressed Size       00000000 (0)\n-2B4F5 Uncompressed Size     00000000 (0)\n-2B4F9 Filename Length       000F (15)\n-2B4FB Extra Length          0000 (0)\n-2B4FD Comment Length        0000 (0)\n-2B4FF Disk Start            0000 (0)\n-2B501 Int File Attributes   0000 (0)\n+2B3D8 Compression Method    0000 (0) 'Stored'\n+2B3DA Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B3DE CRC                   00000000 (0)\n+2B3E2 Compressed Size       00000000 (0)\n+2B3E6 Uncompressed Size     00000000 (0)\n+2B3EA Filename Length       000F (15)\n+2B3EC Extra Length          0000 (0)\n+2B3EE Comment Length        0000 (0)\n+2B3F0 Disk Start            0000 (0)\n+2B3F2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B503 Ext File Attributes   41ED0010 (1106051088)\n+2B3F4 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B507 Local Header Offset   00000718 (1816)\n-2B50B Filename              'XXXXXXXXXXXXXXX'\n+2B3F8 Local Header Offset   00000718 (1816)\n+2B3FC Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B50B: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B3FC: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B50B: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B3FC: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B4E3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B3D4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-2B51A CENTRAL HEADER #28    02014B50 (33639248)\n-2B51E Created Zip Spec      14 (20) '2.0'\n-2B51F Created OS            03 (3) 'Unix'\n-2B520 Extract Zip Spec      0A (10) '1.0'\n-2B521 Extract OS            00 (0) 'MS-DOS'\n-2B522 General Purpose Flag  0800 (2048)\n+2B40B CENTRAL HEADER #28    02014B50 (33639248)\n+2B40F Created Zip Spec      14 (20) '2.0'\n+2B410 Created OS            03 (3) 'Unix'\n+2B411 Extract Zip Spec      0A (10) '1.0'\n+2B412 Extract OS            00 (0) 'MS-DOS'\n+2B413 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B524 Compression Method    0000 (0) 'Stored'\n-2B526 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B52A CRC                   00000000 (0)\n-2B52E Compressed Size       00000000 (0)\n-2B532 Uncompressed Size     00000000 (0)\n-2B536 Filename Length       0024 (36)\n-2B538 Extra Length          0000 (0)\n-2B53A Comment Length        0000 (0)\n-2B53C Disk Start            0000 (0)\n-2B53E Int File Attributes   0000 (0)\n+2B415 Compression Method    0000 (0) 'Stored'\n+2B417 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B41B CRC                   00000000 (0)\n+2B41F Compressed Size       00000000 (0)\n+2B423 Uncompressed Size     00000000 (0)\n+2B427 Filename Length       0024 (36)\n+2B429 Extra Length          0000 (0)\n+2B42B Comment Length        0000 (0)\n+2B42D Disk Start            0000 (0)\n+2B42F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B540 Ext File Attributes   41ED0010 (1106051088)\n+2B431 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B544 Local Header Offset   00000745 (1861)\n-2B548 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B435 Local Header Offset   00000745 (1861)\n+2B439 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B548: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B439: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B548: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B439: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B520: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B411: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B56C CENTRAL HEADER #29    02014B50 (33639248)\n-2B570 Created Zip Spec      14 (20) '2.0'\n-2B571 Created OS            03 (3) 'Unix'\n-2B572 Extract Zip Spec      0A (10) '1.0'\n-2B573 Extract OS            00 (0) 'MS-DOS'\n-2B574 General Purpose Flag  0800 (2048)\n+2B45D CENTRAL HEADER #29    02014B50 (33639248)\n+2B461 Created Zip Spec      14 (20) '2.0'\n+2B462 Created OS            03 (3) 'Unix'\n+2B463 Extract Zip Spec      0A (10) '1.0'\n+2B464 Extract OS            00 (0) 'MS-DOS'\n+2B465 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-2B576 Compression Method    0000 (0) 'Stored'\n-2B578 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B57C CRC                   00000000 (0)\n-2B580 Compressed Size       00000000 (0)\n-2B584 Uncompressed Size     00000000 (0)\n-2B588 Filename Length       002A (42)\n-2B58A Extra Length          0000 (0)\n-2B58C Comment Length        0000 (0)\n-2B58E Disk Start            0000 (0)\n-2B590 Int File Attributes   0000 (0)\n+2B467 Compression Method    0000 (0) 'Stored'\n+2B469 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B46D CRC                   00000000 (0)\n+2B471 Compressed Size       00000000 (0)\n+2B475 Uncompressed Size     00000000 (0)\n+2B479 Filename Length       002A (42)\n+2B47B Extra Length          0000 (0)\n+2B47D Comment Length        0000 (0)\n+2B47F Disk Start            0000 (0)\n+2B481 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B592 Ext File Attributes   41ED0010 (1106051088)\n+2B483 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-2B596 Local Header Offset   00000787 (1927)\n-2B59A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B487 Local Header Offset   00000787 (1927)\n+2B48B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B59A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B48B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x2B59A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x2B48B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x2B572: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B463: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-2B5C4 CENTRAL HEADER #30    02014B50 (33639248)\n-2B5C8 Created Zip Spec      14 (20) '2.0'\n-2B5C9 Created OS            03 (3) 'Unix'\n-2B5CA Extract Zip Spec      14 (20) '2.0'\n-2B5CB Extract OS            00 (0) 'MS-DOS'\n-2B5CC General Purpose Flag  0800 (2048)\n+2B4B5 CENTRAL HEADER #30    02014B50 (33639248)\n+2B4B9 Created Zip Spec      14 (20) '2.0'\n+2B4BA Created OS            03 (3) 'Unix'\n+2B4BB Extract Zip Spec      14 (20) '2.0'\n+2B4BC Extract OS            00 (0) 'MS-DOS'\n+2B4BD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B5CE Compression Method    0008 (8) 'Deflated'\n-2B5D0 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B5D4 CRC                   2BA4533F (732189503)\n-2B5D8 Compressed Size       00000FD4 (4052)\n-2B5DC Uncompressed Size     00005E47 (24135)\n-2B5E0 Filename Length       001E (30)\n-2B5E2 Extra Length          0000 (0)\n-2B5E4 Comment Length        0000 (0)\n-2B5E6 Disk Start            0000 (0)\n-2B5E8 Int File Attributes   0000 (0)\n+2B4BF Compression Method    0008 (8) 'Deflated'\n+2B4C1 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B4C5 CRC                   EA03ABD5 (3926109141)\n+2B4C9 Compressed Size       00000FBE (4030)\n+2B4CD Uncompressed Size     00005A93 (23187)\n+2B4D1 Filename Length       001E (30)\n+2B4D3 Extra Length          0000 (0)\n+2B4D5 Comment Length        0000 (0)\n+2B4D7 Disk Start            0000 (0)\n+2B4D9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B5EA Ext File Attributes   81A40000 (2175008768)\n+2B4DB Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B5EE Local Header Offset   000007CF (1999)\n-2B5F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B4DF Local Header Offset   000007CF (1999)\n+2B4E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B5F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B4E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B610 CENTRAL HEADER #31    02014B50 (33639248)\n-2B614 Created Zip Spec      14 (20) '2.0'\n-2B615 Created OS            03 (3) 'Unix'\n-2B616 Extract Zip Spec      14 (20) '2.0'\n-2B617 Extract OS            00 (0) 'MS-DOS'\n-2B618 General Purpose Flag  0800 (2048)\n+2B501 CENTRAL HEADER #31    02014B50 (33639248)\n+2B505 Created Zip Spec      14 (20) '2.0'\n+2B506 Created OS            03 (3) 'Unix'\n+2B507 Extract Zip Spec      14 (20) '2.0'\n+2B508 Extract OS            00 (0) 'MS-DOS'\n+2B509 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B61A Compression Method    0008 (8) 'Deflated'\n-2B61C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B620 CRC                   1626ADEB (371633643)\n-2B624 Compressed Size       00000229 (553)\n-2B628 Uncompressed Size     00000405 (1029)\n-2B62C Filename Length       0024 (36)\n-2B62E Extra Length          0000 (0)\n-2B630 Comment Length        0000 (0)\n-2B632 Disk Start            0000 (0)\n-2B634 Int File Attributes   0000 (0)\n+2B50B Compression Method    0008 (8) 'Deflated'\n+2B50D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B511 CRC                   36E9AF18 (921284376)\n+2B515 Compressed Size       00000221 (545)\n+2B519 Uncompressed Size     000003DF (991)\n+2B51D Filename Length       0024 (36)\n+2B51F Extra Length          0000 (0)\n+2B521 Comment Length        0000 (0)\n+2B523 Disk Start            0000 (0)\n+2B525 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B636 Ext File Attributes   81A40000 (2175008768)\n+2B527 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B63A Local Header Offset   000017DF (6111)\n-2B63E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B52B Local Header Offset   000017C9 (6089)\n+2B52F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B63E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B52F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B662 CENTRAL HEADER #32    02014B50 (33639248)\n-2B666 Created Zip Spec      14 (20) '2.0'\n-2B667 Created OS            03 (3) 'Unix'\n-2B668 Extract Zip Spec      14 (20) '2.0'\n-2B669 Extract OS            00 (0) 'MS-DOS'\n-2B66A General Purpose Flag  0800 (2048)\n+2B553 CENTRAL HEADER #32    02014B50 (33639248)\n+2B557 Created Zip Spec      14 (20) '2.0'\n+2B558 Created OS            03 (3) 'Unix'\n+2B559 Extract Zip Spec      14 (20) '2.0'\n+2B55A Extract OS            00 (0) 'MS-DOS'\n+2B55B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B66C Compression Method    0008 (8) 'Deflated'\n-2B66E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B672 CRC                   10F3A5DC (284403164)\n-2B676 Compressed Size       000014B6 (5302)\n-2B67A Uncompressed Size     0000558F (21903)\n-2B67E Filename Length       0025 (37)\n-2B680 Extra Length          0000 (0)\n-2B682 Comment Length        0000 (0)\n-2B684 Disk Start            0000 (0)\n-2B686 Int File Attributes   0000 (0)\n+2B55D Compression Method    0008 (8) 'Deflated'\n+2B55F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B563 CRC                   E0926690 (3767690896)\n+2B567 Compressed Size       000014A0 (5280)\n+2B56B Uncompressed Size     0000535F (21343)\n+2B56F Filename Length       0025 (37)\n+2B571 Extra Length          0000 (0)\n+2B573 Comment Length        0000 (0)\n+2B575 Disk Start            0000 (0)\n+2B577 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B688 Ext File Attributes   81A40000 (2175008768)\n+2B579 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B68C Local Header Offset   00001A4A (6730)\n-2B690 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B57D Local Header Offset   00001A2C (6700)\n+2B581 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B690: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B581: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B6B5 CENTRAL HEADER #33    02014B50 (33639248)\n-2B6B9 Created Zip Spec      14 (20) '2.0'\n-2B6BA Created OS            03 (3) 'Unix'\n-2B6BB Extract Zip Spec      14 (20) '2.0'\n-2B6BC Extract OS            00 (0) 'MS-DOS'\n-2B6BD General Purpose Flag  0800 (2048)\n+2B5A6 CENTRAL HEADER #33    02014B50 (33639248)\n+2B5AA Created Zip Spec      14 (20) '2.0'\n+2B5AB Created OS            03 (3) 'Unix'\n+2B5AC Extract Zip Spec      14 (20) '2.0'\n+2B5AD Extract OS            00 (0) 'MS-DOS'\n+2B5AE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B6BF Compression Method    0008 (8) 'Deflated'\n-2B6C1 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B6C5 CRC                   82DC48D4 (2195474644)\n-2B6C9 Compressed Size       00000BE2 (3042)\n-2B6CD Uncompressed Size     00002F19 (12057)\n-2B6D1 Filename Length       0022 (34)\n-2B6D3 Extra Length          0000 (0)\n-2B6D5 Comment Length        0000 (0)\n-2B6D7 Disk Start            0000 (0)\n-2B6D9 Int File Attributes   0000 (0)\n+2B5B0 Compression Method    0008 (8) 'Deflated'\n+2B5B2 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B5B6 CRC                   61ADB259 (1638773337)\n+2B5BA Compressed Size       00000BD0 (3024)\n+2B5BE Uncompressed Size     00002DF8 (11768)\n+2B5C2 Filename Length       0022 (34)\n+2B5C4 Extra Length          0000 (0)\n+2B5C6 Comment Length        0000 (0)\n+2B5C8 Disk Start            0000 (0)\n+2B5CA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B6DB Ext File Attributes   81A40000 (2175008768)\n+2B5CC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B6DF Local Header Offset   00002F43 (12099)\n-2B6E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B5D0 Local Header Offset   00002F0F (12047)\n+2B5D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B6E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B5D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B705 CENTRAL HEADER #34    02014B50 (33639248)\n-2B709 Created Zip Spec      14 (20) '2.0'\n-2B70A Created OS            03 (3) 'Unix'\n-2B70B Extract Zip Spec      14 (20) '2.0'\n-2B70C Extract OS            00 (0) 'MS-DOS'\n-2B70D General Purpose Flag  0800 (2048)\n+2B5F6 CENTRAL HEADER #34    02014B50 (33639248)\n+2B5FA Created Zip Spec      14 (20) '2.0'\n+2B5FB Created OS            03 (3) 'Unix'\n+2B5FC Extract Zip Spec      14 (20) '2.0'\n+2B5FD Extract OS            00 (0) 'MS-DOS'\n+2B5FE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B70F Compression Method    0008 (8) 'Deflated'\n-2B711 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B715 CRC                   B1F7FE75 (2985819765)\n-2B719 Compressed Size       00000250 (592)\n-2B71D Uncompressed Size     00000458 (1112)\n-2B721 Filename Length       0022 (34)\n-2B723 Extra Length          0000 (0)\n-2B725 Comment Length        0000 (0)\n-2B727 Disk Start            0000 (0)\n-2B729 Int File Attributes   0000 (0)\n+2B600 Compression Method    0008 (8) 'Deflated'\n+2B602 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B606 CRC                   EE42052D (3997304109)\n+2B60A Compressed Size       00000247 (583)\n+2B60E Uncompressed Size     00000432 (1074)\n+2B612 Filename Length       0022 (34)\n+2B614 Extra Length          0000 (0)\n+2B616 Comment Length        0000 (0)\n+2B618 Disk Start            0000 (0)\n+2B61A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B72B Ext File Attributes   81A40000 (2175008768)\n+2B61C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B72F Local Header Offset   00003B65 (15205)\n-2B733 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B620 Local Header Offset   00003B1F (15135)\n+2B624 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B733: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B624: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B755 CENTRAL HEADER #35    02014B50 (33639248)\n-2B759 Created Zip Spec      14 (20) '2.0'\n-2B75A Created OS            03 (3) 'Unix'\n-2B75B Extract Zip Spec      14 (20) '2.0'\n-2B75C Extract OS            00 (0) 'MS-DOS'\n-2B75D General Purpose Flag  0800 (2048)\n+2B646 CENTRAL HEADER #35    02014B50 (33639248)\n+2B64A Created Zip Spec      14 (20) '2.0'\n+2B64B Created OS            03 (3) 'Unix'\n+2B64C Extract Zip Spec      14 (20) '2.0'\n+2B64D Extract OS            00 (0) 'MS-DOS'\n+2B64E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B75F Compression Method    0008 (8) 'Deflated'\n-2B761 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B765 CRC                   9070D9B4 (2423314868)\n-2B769 Compressed Size       000003E0 (992)\n-2B76D Uncompressed Size     00000AF9 (2809)\n-2B771 Filename Length       0029 (41)\n-2B773 Extra Length          0000 (0)\n-2B775 Comment Length        0000 (0)\n-2B777 Disk Start            0000 (0)\n-2B779 Int File Attributes   0000 (0)\n+2B650 Compression Method    0008 (8) 'Deflated'\n+2B652 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B656 CRC                   A111204E (2702254158)\n+2B65A Compressed Size       000003D6 (982)\n+2B65E Uncompressed Size     00000A9A (2714)\n+2B662 Filename Length       0029 (41)\n+2B664 Extra Length          0000 (0)\n+2B666 Comment Length        0000 (0)\n+2B668 Disk Start            0000 (0)\n+2B66A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B77B Ext File Attributes   81A40000 (2175008768)\n+2B66C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B77F Local Header Offset   00003DF5 (15861)\n-2B783 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B670 Local Header Offset   00003DA6 (15782)\n+2B674 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B783: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B674: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B7AC CENTRAL HEADER #36    02014B50 (33639248)\n-2B7B0 Created Zip Spec      14 (20) '2.0'\n-2B7B1 Created OS            03 (3) 'Unix'\n-2B7B2 Extract Zip Spec      14 (20) '2.0'\n-2B7B3 Extract OS            00 (0) 'MS-DOS'\n-2B7B4 General Purpose Flag  0800 (2048)\n+2B69D CENTRAL HEADER #36    02014B50 (33639248)\n+2B6A1 Created Zip Spec      14 (20) '2.0'\n+2B6A2 Created OS            03 (3) 'Unix'\n+2B6A3 Extract Zip Spec      14 (20) '2.0'\n+2B6A4 Extract OS            00 (0) 'MS-DOS'\n+2B6A5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B7B6 Compression Method    0008 (8) 'Deflated'\n-2B7B8 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B7BC CRC                   145FE0AA (341827754)\n-2B7C0 Compressed Size       00000870 (2160)\n-2B7C4 Uncompressed Size     00001DB6 (7606)\n-2B7C8 Filename Length       0026 (38)\n-2B7CA Extra Length          0000 (0)\n-2B7CC Comment Length        0000 (0)\n-2B7CE Disk Start            0000 (0)\n-2B7D0 Int File Attributes   0000 (0)\n+2B6A7 Compression Method    0008 (8) 'Deflated'\n+2B6A9 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B6AD CRC                   946FB6E7 (2490349287)\n+2B6B1 Compressed Size       00000862 (2146)\n+2B6B5 Uncompressed Size     00001CB7 (7351)\n+2B6B9 Filename Length       0026 (38)\n+2B6BB Extra Length          0000 (0)\n+2B6BD Comment Length        0000 (0)\n+2B6BF Disk Start            0000 (0)\n+2B6C1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B7D2 Ext File Attributes   81A40000 (2175008768)\n+2B6C3 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B7D6 Local Header Offset   0000421C (16924)\n-2B7DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B6C7 Local Header Offset   000041C3 (16835)\n+2B6CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B7DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B6CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B800 CENTRAL HEADER #37    02014B50 (33639248)\n-2B804 Created Zip Spec      14 (20) '2.0'\n-2B805 Created OS            03 (3) 'Unix'\n-2B806 Extract Zip Spec      14 (20) '2.0'\n-2B807 Extract OS            00 (0) 'MS-DOS'\n-2B808 General Purpose Flag  0800 (2048)\n+2B6F1 CENTRAL HEADER #37    02014B50 (33639248)\n+2B6F5 Created Zip Spec      14 (20) '2.0'\n+2B6F6 Created OS            03 (3) 'Unix'\n+2B6F7 Extract Zip Spec      14 (20) '2.0'\n+2B6F8 Extract OS            00 (0) 'MS-DOS'\n+2B6F9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B80A Compression Method    0008 (8) 'Deflated'\n-2B80C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B810 CRC                   EBDD55D1 (3957151185)\n-2B814 Compressed Size       00000291 (657)\n-2B818 Uncompressed Size     000004D8 (1240)\n-2B81C Filename Length       0022 (34)\n-2B81E Extra Length          0000 (0)\n-2B820 Comment Length        0000 (0)\n-2B822 Disk Start            0000 (0)\n-2B824 Int File Attributes   0000 (0)\n+2B6FB Compression Method    0008 (8) 'Deflated'\n+2B6FD Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B701 CRC                   4346D71A (1128716058)\n+2B705 Compressed Size       00000289 (649)\n+2B709 Uncompressed Size     000004B0 (1200)\n+2B70D Filename Length       0022 (34)\n+2B70F Extra Length          0000 (0)\n+2B711 Comment Length        0000 (0)\n+2B713 Disk Start            0000 (0)\n+2B715 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B826 Ext File Attributes   81A40000 (2175008768)\n+2B717 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B82A Local Header Offset   00004AD0 (19152)\n-2B82E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B71B Local Header Offset   00004A69 (19049)\n+2B71F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B82E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B71F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B850 CENTRAL HEADER #38    02014B50 (33639248)\n-2B854 Created Zip Spec      14 (20) '2.0'\n-2B855 Created OS            03 (3) 'Unix'\n-2B856 Extract Zip Spec      14 (20) '2.0'\n-2B857 Extract OS            00 (0) 'MS-DOS'\n-2B858 General Purpose Flag  0800 (2048)\n+2B741 CENTRAL HEADER #38    02014B50 (33639248)\n+2B745 Created Zip Spec      14 (20) '2.0'\n+2B746 Created OS            03 (3) 'Unix'\n+2B747 Extract Zip Spec      14 (20) '2.0'\n+2B748 Extract OS            00 (0) 'MS-DOS'\n+2B749 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B85A Compression Method    0008 (8) 'Deflated'\n-2B85C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B860 CRC                   F4A210E5 (4104261861)\n-2B864 Compressed Size       000002C9 (713)\n-2B868 Uncompressed Size     000005FC (1532)\n-2B86C Filename Length       0028 (40)\n-2B86E Extra Length          0000 (0)\n-2B870 Comment Length        0000 (0)\n-2B872 Disk Start            0000 (0)\n-2B874 Int File Attributes   0000 (0)\n+2B74B Compression Method    0008 (8) 'Deflated'\n+2B74D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B751 CRC                   2E65ACD1 (778415313)\n+2B755 Compressed Size       000002C2 (706)\n+2B759 Uncompressed Size     000005D2 (1490)\n+2B75D Filename Length       0028 (40)\n+2B75F Extra Length          0000 (0)\n+2B761 Comment Length        0000 (0)\n+2B763 Disk Start            0000 (0)\n+2B765 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B876 Ext File Attributes   81A40000 (2175008768)\n+2B767 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B87A Local Header Offset   00004DA1 (19873)\n-2B87E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B76B Local Header Offset   00004D32 (19762)\n+2B76F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B87E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B76F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B8A6 CENTRAL HEADER #39    02014B50 (33639248)\n-2B8AA Created Zip Spec      14 (20) '2.0'\n-2B8AB Created OS            03 (3) 'Unix'\n-2B8AC Extract Zip Spec      14 (20) '2.0'\n-2B8AD Extract OS            00 (0) 'MS-DOS'\n-2B8AE General Purpose Flag  0800 (2048)\n+2B797 CENTRAL HEADER #39    02014B50 (33639248)\n+2B79B Created Zip Spec      14 (20) '2.0'\n+2B79C Created OS            03 (3) 'Unix'\n+2B79D Extract Zip Spec      14 (20) '2.0'\n+2B79E Extract OS            00 (0) 'MS-DOS'\n+2B79F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B8B0 Compression Method    0008 (8) 'Deflated'\n-2B8B2 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B8B6 CRC                   A1D45456 (2715046998)\n-2B8BA Compressed Size       00000622 (1570)\n-2B8BE Uncompressed Size     000013C0 (5056)\n-2B8C2 Filename Length       002B (43)\n-2B8C4 Extra Length          0000 (0)\n-2B8C6 Comment Length        0000 (0)\n-2B8C8 Disk Start            0000 (0)\n-2B8CA Int File Attributes   0000 (0)\n+2B7A1 Compression Method    0008 (8) 'Deflated'\n+2B7A3 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B7A7 CRC                   462B0BE3 (1177226211)\n+2B7AB Compressed Size       00000619 (1561)\n+2B7AF Uncompressed Size     00001315 (4885)\n+2B7B3 Filename Length       002B (43)\n+2B7B5 Extra Length          0000 (0)\n+2B7B7 Comment Length        0000 (0)\n+2B7B9 Disk Start            0000 (0)\n+2B7BB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B8CC Ext File Attributes   81A40000 (2175008768)\n+2B7BD Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B8D0 Local Header Offset   000050B0 (20656)\n-2B8D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B7C1 Local Header Offset   0000503A (20538)\n+2B7C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B8D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B7C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B8FF CENTRAL HEADER #40    02014B50 (33639248)\n-2B903 Created Zip Spec      14 (20) '2.0'\n-2B904 Created OS            03 (3) 'Unix'\n-2B905 Extract Zip Spec      14 (20) '2.0'\n-2B906 Extract OS            00 (0) 'MS-DOS'\n-2B907 General Purpose Flag  0800 (2048)\n+2B7F0 CENTRAL HEADER #40    02014B50 (33639248)\n+2B7F4 Created Zip Spec      14 (20) '2.0'\n+2B7F5 Created OS            03 (3) 'Unix'\n+2B7F6 Extract Zip Spec      14 (20) '2.0'\n+2B7F7 Extract OS            00 (0) 'MS-DOS'\n+2B7F8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B909 Compression Method    0008 (8) 'Deflated'\n-2B90B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B90F CRC                   8FD5E3A8 (2413159336)\n-2B913 Compressed Size       00000E99 (3737)\n-2B917 Uncompressed Size     000038C0 (14528)\n-2B91B Filename Length       002E (46)\n-2B91D Extra Length          0000 (0)\n-2B91F Comment Length        0000 (0)\n-2B921 Disk Start            0000 (0)\n-2B923 Int File Attributes   0000 (0)\n+2B7FA Compression Method    0008 (8) 'Deflated'\n+2B7FC Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B800 CRC                   FAEDFD42 (4209900866)\n+2B804 Compressed Size       00000E87 (3719)\n+2B808 Uncompressed Size     00003737 (14135)\n+2B80C Filename Length       002E (46)\n+2B80E Extra Length          0000 (0)\n+2B810 Comment Length        0000 (0)\n+2B812 Disk Start            0000 (0)\n+2B814 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B925 Ext File Attributes   81A40000 (2175008768)\n+2B816 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B929 Local Header Offset   0000571B (22299)\n-2B92D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B81A Local Header Offset   0000569C (22172)\n+2B81E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B92D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B81E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B95B CENTRAL HEADER #41    02014B50 (33639248)\n-2B95F Created Zip Spec      14 (20) '2.0'\n-2B960 Created OS            03 (3) 'Unix'\n-2B961 Extract Zip Spec      14 (20) '2.0'\n-2B962 Extract OS            00 (0) 'MS-DOS'\n-2B963 General Purpose Flag  0800 (2048)\n+2B84C CENTRAL HEADER #41    02014B50 (33639248)\n+2B850 Created Zip Spec      14 (20) '2.0'\n+2B851 Created OS            03 (3) 'Unix'\n+2B852 Extract Zip Spec      14 (20) '2.0'\n+2B853 Extract OS            00 (0) 'MS-DOS'\n+2B854 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B965 Compression Method    0008 (8) 'Deflated'\n-2B967 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B96B CRC                   E731CECA (3878801098)\n-2B96F Compressed Size       00000D1E (3358)\n-2B973 Uncompressed Size     00004384 (17284)\n-2B977 Filename Length       002B (43)\n-2B979 Extra Length          0000 (0)\n-2B97B Comment Length        0000 (0)\n-2B97D Disk Start            0000 (0)\n-2B97F Int File Attributes   0000 (0)\n+2B856 Compression Method    0008 (8) 'Deflated'\n+2B858 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B85C CRC                   E2574654 (3797370452)\n+2B860 Compressed Size       00000D0C (3340)\n+2B864 Uncompressed Size     00004142 (16706)\n+2B868 Filename Length       002B (43)\n+2B86A Extra Length          0000 (0)\n+2B86C Comment Length        0000 (0)\n+2B86E Disk Start            0000 (0)\n+2B870 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B981 Ext File Attributes   81A40000 (2175008768)\n+2B872 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B985 Local Header Offset   00006600 (26112)\n-2B989 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B876 Local Header Offset   0000656F (25967)\n+2B87A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B989: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B87A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2B9B4 CENTRAL HEADER #42    02014B50 (33639248)\n-2B9B8 Created Zip Spec      14 (20) '2.0'\n-2B9B9 Created OS            03 (3) 'Unix'\n-2B9BA Extract Zip Spec      14 (20) '2.0'\n-2B9BB Extract OS            00 (0) 'MS-DOS'\n-2B9BC General Purpose Flag  0800 (2048)\n+2B8A5 CENTRAL HEADER #42    02014B50 (33639248)\n+2B8A9 Created Zip Spec      14 (20) '2.0'\n+2B8AA Created OS            03 (3) 'Unix'\n+2B8AB Extract Zip Spec      14 (20) '2.0'\n+2B8AC Extract OS            00 (0) 'MS-DOS'\n+2B8AD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B9BE Compression Method    0008 (8) 'Deflated'\n-2B9C0 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2B9C4 CRC                   2CCD3D7E (751648126)\n-2B9C8 Compressed Size       000007FF (2047)\n-2B9CC Uncompressed Size     00001C4F (7247)\n-2B9D0 Filename Length       0029 (41)\n-2B9D2 Extra Length          0000 (0)\n-2B9D4 Comment Length        0000 (0)\n-2B9D6 Disk Start            0000 (0)\n-2B9D8 Int File Attributes   0000 (0)\n+2B8AF Compression Method    0008 (8) 'Deflated'\n+2B8B1 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B8B5 CRC                   9F2DA6B8 (2670569144)\n+2B8B9 Compressed Size       000007F3 (2035)\n+2B8BD Uncompressed Size     00001B79 (7033)\n+2B8C1 Filename Length       0029 (41)\n+2B8C3 Extra Length          0000 (0)\n+2B8C5 Comment Length        0000 (0)\n+2B8C7 Disk Start            0000 (0)\n+2B8C9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2B9DA Ext File Attributes   81A40000 (2175008768)\n+2B8CB Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2B9DE Local Header Offset   00007367 (29543)\n-2B9E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B8CF Local Header Offset   000072C4 (29380)\n+2B8D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B9E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B8D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BA0B CENTRAL HEADER #43    02014B50 (33639248)\n-2BA0F Created Zip Spec      14 (20) '2.0'\n-2BA10 Created OS            03 (3) 'Unix'\n-2BA11 Extract Zip Spec      14 (20) '2.0'\n-2BA12 Extract OS            00 (0) 'MS-DOS'\n-2BA13 General Purpose Flag  0800 (2048)\n+2B8FC CENTRAL HEADER #43    02014B50 (33639248)\n+2B900 Created Zip Spec      14 (20) '2.0'\n+2B901 Created OS            03 (3) 'Unix'\n+2B902 Extract Zip Spec      14 (20) '2.0'\n+2B903 Extract OS            00 (0) 'MS-DOS'\n+2B904 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BA15 Compression Method    0008 (8) 'Deflated'\n-2BA17 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BA1B CRC                   A957C743 (2841102147)\n-2BA1F Compressed Size       00000A21 (2593)\n-2BA23 Uncompressed Size     00002F61 (12129)\n-2BA27 Filename Length       002D (45)\n-2BA29 Extra Length          0000 (0)\n-2BA2B Comment Length        0000 (0)\n-2BA2D Disk Start            0000 (0)\n-2BA2F Int File Attributes   0000 (0)\n+2B906 Compression Method    0008 (8) 'Deflated'\n+2B908 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B90C CRC                   0C268234 (203850292)\n+2B910 Compressed Size       00000A12 (2578)\n+2B914 Uncompressed Size     00002E03 (11779)\n+2B918 Filename Length       002D (45)\n+2B91A Extra Length          0000 (0)\n+2B91C Comment Length        0000 (0)\n+2B91E Disk Start            0000 (0)\n+2B920 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BA31 Ext File Attributes   81A40000 (2175008768)\n+2B922 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BA35 Local Header Offset   00007BAD (31661)\n-2BA39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B926 Local Header Offset   00007AFE (31486)\n+2B92A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BA39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B92A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BA66 CENTRAL HEADER #44    02014B50 (33639248)\n-2BA6A Created Zip Spec      14 (20) '2.0'\n-2BA6B Created OS            03 (3) 'Unix'\n-2BA6C Extract Zip Spec      14 (20) '2.0'\n-2BA6D Extract OS            00 (0) 'MS-DOS'\n-2BA6E General Purpose Flag  0800 (2048)\n+2B957 CENTRAL HEADER #44    02014B50 (33639248)\n+2B95B Created Zip Spec      14 (20) '2.0'\n+2B95C Created OS            03 (3) 'Unix'\n+2B95D Extract Zip Spec      14 (20) '2.0'\n+2B95E Extract OS            00 (0) 'MS-DOS'\n+2B95F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BA70 Compression Method    0008 (8) 'Deflated'\n-2BA72 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BA76 CRC                   5CE38909 (1558415625)\n-2BA7A Compressed Size       0000103D (4157)\n-2BA7E Uncompressed Size     00005D74 (23924)\n-2BA82 Filename Length       002A (42)\n-2BA84 Extra Length          0000 (0)\n-2BA86 Comment Length        0000 (0)\n-2BA88 Disk Start            0000 (0)\n-2BA8A Int File Attributes   0000 (0)\n+2B961 Compression Method    0008 (8) 'Deflated'\n+2B963 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B967 CRC                   AA4194FB (2856424699)\n+2B96B Compressed Size       0000102E (4142)\n+2B96F Uncompressed Size     00005B1E (23326)\n+2B973 Filename Length       002A (42)\n+2B975 Extra Length          0000 (0)\n+2B977 Comment Length        0000 (0)\n+2B979 Disk Start            0000 (0)\n+2B97B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BA8C Ext File Attributes   81A40000 (2175008768)\n+2B97D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BA90 Local Header Offset   00008619 (34329)\n-2BA94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B981 Local Header Offset   0000855B (34139)\n+2B985 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BA94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B985: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BABE CENTRAL HEADER #45    02014B50 (33639248)\n-2BAC2 Created Zip Spec      14 (20) '2.0'\n-2BAC3 Created OS            03 (3) 'Unix'\n-2BAC4 Extract Zip Spec      14 (20) '2.0'\n-2BAC5 Extract OS            00 (0) 'MS-DOS'\n-2BAC6 General Purpose Flag  0800 (2048)\n+2B9AF CENTRAL HEADER #45    02014B50 (33639248)\n+2B9B3 Created Zip Spec      14 (20) '2.0'\n+2B9B4 Created OS            03 (3) 'Unix'\n+2B9B5 Extract Zip Spec      14 (20) '2.0'\n+2B9B6 Extract OS            00 (0) 'MS-DOS'\n+2B9B7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BAC8 Compression Method    0008 (8) 'Deflated'\n-2BACA Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BACE CRC                   5D7A4DC7 (1568296391)\n-2BAD2 Compressed Size       000007D7 (2007)\n-2BAD6 Uncompressed Size     00001A62 (6754)\n-2BADA Filename Length       0023 (35)\n-2BADC Extra Length          0000 (0)\n-2BADE Comment Length        0000 (0)\n-2BAE0 Disk Start            0000 (0)\n-2BAE2 Int File Attributes   0000 (0)\n+2B9B9 Compression Method    0008 (8) 'Deflated'\n+2B9BB Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2B9BF CRC                   FC5F7A58 (4234115672)\n+2B9C3 Compressed Size       000007CB (1995)\n+2B9C7 Uncompressed Size     000019C2 (6594)\n+2B9CB Filename Length       0023 (35)\n+2B9CD Extra Length          0000 (0)\n+2B9CF Comment Length        0000 (0)\n+2B9D1 Disk Start            0000 (0)\n+2B9D3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BAE4 Ext File Attributes   81A40000 (2175008768)\n+2B9D5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BAE8 Local Header Offset   0000969E (38558)\n-2BAEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B9D9 Local Header Offset   000095D1 (38353)\n+2B9DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BAEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B9DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BB0F CENTRAL HEADER #46    02014B50 (33639248)\n-2BB13 Created Zip Spec      14 (20) '2.0'\n-2BB14 Created OS            03 (3) 'Unix'\n-2BB15 Extract Zip Spec      14 (20) '2.0'\n-2BB16 Extract OS            00 (0) 'MS-DOS'\n-2BB17 General Purpose Flag  0800 (2048)\n+2BA00 CENTRAL HEADER #46    02014B50 (33639248)\n+2BA04 Created Zip Spec      14 (20) '2.0'\n+2BA05 Created OS            03 (3) 'Unix'\n+2BA06 Extract Zip Spec      14 (20) '2.0'\n+2BA07 Extract OS            00 (0) 'MS-DOS'\n+2BA08 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BB19 Compression Method    0008 (8) 'Deflated'\n-2BB1B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BB1F CRC                   F704B52A (4144280874)\n-2BB23 Compressed Size       00000592 (1426)\n-2BB27 Uncompressed Size     0000174E (5966)\n-2BB2B Filename Length       0030 (48)\n-2BB2D Extra Length          0000 (0)\n-2BB2F Comment Length        0000 (0)\n-2BB31 Disk Start            0000 (0)\n-2BB33 Int File Attributes   0000 (0)\n+2BA0A Compression Method    0008 (8) 'Deflated'\n+2BA0C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BA10 CRC                   4AA9E778 (1252648824)\n+2BA14 Compressed Size       00000589 (1417)\n+2BA18 Uncompressed Size     000016C0 (5824)\n+2BA1C Filename Length       0030 (48)\n+2BA1E Extra Length          0000 (0)\n+2BA20 Comment Length        0000 (0)\n+2BA22 Disk Start            0000 (0)\n+2BA24 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BB35 Ext File Attributes   81A40000 (2175008768)\n+2BA26 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BB39 Local Header Offset   00009EB6 (40630)\n-2BB3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BA2A Local Header Offset   00009DDD (40413)\n+2BA2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BB3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BA2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BB6D CENTRAL HEADER #47    02014B50 (33639248)\n-2BB71 Created Zip Spec      14 (20) '2.0'\n-2BB72 Created OS            03 (3) 'Unix'\n-2BB73 Extract Zip Spec      14 (20) '2.0'\n-2BB74 Extract OS            00 (0) 'MS-DOS'\n-2BB75 General Purpose Flag  0800 (2048)\n+2BA5E CENTRAL HEADER #47    02014B50 (33639248)\n+2BA62 Created Zip Spec      14 (20) '2.0'\n+2BA63 Created OS            03 (3) 'Unix'\n+2BA64 Extract Zip Spec      14 (20) '2.0'\n+2BA65 Extract OS            00 (0) 'MS-DOS'\n+2BA66 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BB77 Compression Method    0008 (8) 'Deflated'\n-2BB79 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BB7D CRC                   650A50CF (1695174863)\n-2BB81 Compressed Size       0000030F (783)\n-2BB85 Uncompressed Size     0000077A (1914)\n-2BB89 Filename Length       0035 (53)\n-2BB8B Extra Length          0000 (0)\n-2BB8D Comment Length        0000 (0)\n-2BB8F Disk Start            0000 (0)\n-2BB91 Int File Attributes   0000 (0)\n+2BA68 Compression Method    0008 (8) 'Deflated'\n+2BA6A Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BA6E CRC                   3AE1B870 (987871344)\n+2BA72 Compressed Size       00000307 (775)\n+2BA76 Uncompressed Size     00000735 (1845)\n+2BA7A Filename Length       0035 (53)\n+2BA7C Extra Length          0000 (0)\n+2BA7E Comment Length        0000 (0)\n+2BA80 Disk Start            0000 (0)\n+2BA82 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BB93 Ext File Attributes   81A40000 (2175008768)\n+2BA84 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BB97 Local Header Offset   0000A496 (42134)\n-2BB9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BA88 Local Header Offset   0000A3B4 (41908)\n+2BA8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BB9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BA8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BBD0 CENTRAL HEADER #48    02014B50 (33639248)\n-2BBD4 Created Zip Spec      14 (20) '2.0'\n-2BBD5 Created OS            03 (3) 'Unix'\n-2BBD6 Extract Zip Spec      14 (20) '2.0'\n-2BBD7 Extract OS            00 (0) 'MS-DOS'\n-2BBD8 General Purpose Flag  0800 (2048)\n+2BAC1 CENTRAL HEADER #48    02014B50 (33639248)\n+2BAC5 Created Zip Spec      14 (20) '2.0'\n+2BAC6 Created OS            03 (3) 'Unix'\n+2BAC7 Extract Zip Spec      14 (20) '2.0'\n+2BAC8 Extract OS            00 (0) 'MS-DOS'\n+2BAC9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BBDA Compression Method    0008 (8) 'Deflated'\n-2BBDC Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BBE0 CRC                   FD56735F (4250301279)\n-2BBE4 Compressed Size       00000C16 (3094)\n-2BBE8 Uncompressed Size     000045C9 (17865)\n-2BBEC Filename Length       0031 (49)\n-2BBEE Extra Length          0000 (0)\n-2BBF0 Comment Length        0000 (0)\n-2BBF2 Disk Start            0000 (0)\n-2BBF4 Int File Attributes   0000 (0)\n+2BACB Compression Method    0008 (8) 'Deflated'\n+2BACD Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BAD1 CRC                   942036A4 (2485139108)\n+2BAD5 Compressed Size       00000C06 (3078)\n+2BAD9 Uncompressed Size     0000441F (17439)\n+2BADD Filename Length       0031 (49)\n+2BADF Extra Length          0000 (0)\n+2BAE1 Comment Length        0000 (0)\n+2BAE3 Disk Start            0000 (0)\n+2BAE5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BBF6 Ext File Attributes   81A40000 (2175008768)\n+2BAE7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BBFA Local Header Offset   0000A7F8 (43000)\n-2BBFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BAEB Local Header Offset   0000A70E (42766)\n+2BAEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BBFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BAEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BC2F CENTRAL HEADER #49    02014B50 (33639248)\n-2BC33 Created Zip Spec      14 (20) '2.0'\n-2BC34 Created OS            03 (3) 'Unix'\n-2BC35 Extract Zip Spec      14 (20) '2.0'\n-2BC36 Extract OS            00 (0) 'MS-DOS'\n-2BC37 General Purpose Flag  0800 (2048)\n+2BB20 CENTRAL HEADER #49    02014B50 (33639248)\n+2BB24 Created Zip Spec      14 (20) '2.0'\n+2BB25 Created OS            03 (3) 'Unix'\n+2BB26 Extract Zip Spec      14 (20) '2.0'\n+2BB27 Extract OS            00 (0) 'MS-DOS'\n+2BB28 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BC39 Compression Method    0008 (8) 'Deflated'\n-2BC3B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BC3F CRC                   5C7E4A57 (1551780439)\n-2BC43 Compressed Size       0000001A (26)\n-2BC47 Uncompressed Size     0000001C (28)\n-2BC4B Filename Length       0025 (37)\n-2BC4D Extra Length          0000 (0)\n-2BC4F Comment Length        0000 (0)\n-2BC51 Disk Start            0000 (0)\n-2BC53 Int File Attributes   0000 (0)\n+2BB2A Compression Method    0008 (8) 'Deflated'\n+2BB2C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BB30 CRC                   5C2EB634 (1546565172)\n+2BB34 Compressed Size       00000019 (25)\n+2BB38 Uncompressed Size     0000001B (27)\n+2BB3C Filename Length       0025 (37)\n+2BB3E Extra Length          0000 (0)\n+2BB40 Comment Length        0000 (0)\n+2BB42 Disk Start            0000 (0)\n+2BB44 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BC55 Ext File Attributes   81A40000 (2175008768)\n+2BB46 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BC59 Local Header Offset   0000B45D (46173)\n-2BC5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BB4A Local Header Offset   0000B363 (45923)\n+2BB4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BC5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BB4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BC82 CENTRAL HEADER #50    02014B50 (33639248)\n-2BC86 Created Zip Spec      14 (20) '2.0'\n-2BC87 Created OS            03 (3) 'Unix'\n-2BC88 Extract Zip Spec      14 (20) '2.0'\n-2BC89 Extract OS            00 (0) 'MS-DOS'\n-2BC8A General Purpose Flag  0800 (2048)\n+2BB73 CENTRAL HEADER #50    02014B50 (33639248)\n+2BB77 Created Zip Spec      14 (20) '2.0'\n+2BB78 Created OS            03 (3) 'Unix'\n+2BB79 Extract Zip Spec      14 (20) '2.0'\n+2BB7A Extract OS            00 (0) 'MS-DOS'\n+2BB7B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BC8C Compression Method    0008 (8) 'Deflated'\n-2BC8E Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BC92 CRC                   730D69A1 (1930258849)\n-2BC96 Compressed Size       0000005C (92)\n-2BC9A Uncompressed Size     00000092 (146)\n-2BC9E Filename Length       0030 (48)\n-2BCA0 Extra Length          0000 (0)\n-2BCA2 Comment Length        0000 (0)\n-2BCA4 Disk Start            0000 (0)\n-2BCA6 Int File Attributes   0000 (0)\n+2BB7D Compression Method    0008 (8) 'Deflated'\n+2BB7F Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BB83 CRC                   DD6F8F44 (3715075908)\n+2BB87 Compressed Size       0000005A (90)\n+2BB8B Uncompressed Size     0000008D (141)\n+2BB8F Filename Length       0030 (48)\n+2BB91 Extra Length          0000 (0)\n+2BB93 Comment Length        0000 (0)\n+2BB95 Disk Start            0000 (0)\n+2BB97 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BCA8 Ext File Attributes   81A40000 (2175008768)\n+2BB99 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BCAC Local Header Offset   0000B4BA (46266)\n-2BCB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BB9D Local Header Offset   0000B3BF (46015)\n+2BBA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BCB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BBA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BCE0 CENTRAL HEADER #51    02014B50 (33639248)\n-2BCE4 Created Zip Spec      14 (20) '2.0'\n-2BCE5 Created OS            03 (3) 'Unix'\n-2BCE6 Extract Zip Spec      14 (20) '2.0'\n-2BCE7 Extract OS            00 (0) 'MS-DOS'\n-2BCE8 General Purpose Flag  0800 (2048)\n+2BBD1 CENTRAL HEADER #51    02014B50 (33639248)\n+2BBD5 Created Zip Spec      14 (20) '2.0'\n+2BBD6 Created OS            03 (3) 'Unix'\n+2BBD7 Extract Zip Spec      14 (20) '2.0'\n+2BBD8 Extract OS            00 (0) 'MS-DOS'\n+2BBD9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BCEA Compression Method    0008 (8) 'Deflated'\n-2BCEC Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BCF0 CRC                   E497D7EA (3835156458)\n-2BCF4 Compressed Size       00001140 (4416)\n-2BCF8 Uncompressed Size     0000324C (12876)\n-2BCFC Filename Length       003C (60)\n-2BCFE Extra Length          0000 (0)\n-2BD00 Comment Length        0000 (0)\n-2BD02 Disk Start            0000 (0)\n-2BD04 Int File Attributes   0000 (0)\n+2BBDB Compression Method    0008 (8) 'Deflated'\n+2BBDD Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BBE1 CRC                   E497D7EA (3835156458)\n+2BBE5 Compressed Size       00001140 (4416)\n+2BBE9 Uncompressed Size     0000324C (12876)\n+2BBED Filename Length       003C (60)\n+2BBEF Extra Length          0000 (0)\n+2BBF1 Comment Length        0000 (0)\n+2BBF3 Disk Start            0000 (0)\n+2BBF5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BD06 Ext File Attributes   81A40000 (2175008768)\n+2BBF7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BD0A Local Header Offset   0000B564 (46436)\n-2BD0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BBFB Local Header Offset   0000B467 (46183)\n+2BBFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BD0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BBFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BD4A CENTRAL HEADER #52    02014B50 (33639248)\n-2BD4E Created Zip Spec      14 (20) '2.0'\n-2BD4F Created OS            03 (3) 'Unix'\n-2BD50 Extract Zip Spec      14 (20) '2.0'\n-2BD51 Extract OS            00 (0) 'MS-DOS'\n-2BD52 General Purpose Flag  0800 (2048)\n+2BC3B CENTRAL HEADER #52    02014B50 (33639248)\n+2BC3F Created Zip Spec      14 (20) '2.0'\n+2BC40 Created OS            03 (3) 'Unix'\n+2BC41 Extract Zip Spec      14 (20) '2.0'\n+2BC42 Extract OS            00 (0) 'MS-DOS'\n+2BC43 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BD54 Compression Method    0008 (8) 'Deflated'\n-2BD56 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BD5A CRC                   F1F630C0 (4059443392)\n-2BD5E Compressed Size       000013DD (5085)\n-2BD62 Uncompressed Size     00003FA4 (16292)\n-2BD66 Filename Length       003F (63)\n-2BD68 Extra Length          0000 (0)\n-2BD6A Comment Length        0000 (0)\n-2BD6C Disk Start            0000 (0)\n-2BD6E Int File Attributes   0000 (0)\n+2BC45 Compression Method    0008 (8) 'Deflated'\n+2BC47 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BC4B CRC                   F1F630C0 (4059443392)\n+2BC4F Compressed Size       000013DD (5085)\n+2BC53 Uncompressed Size     00003FA4 (16292)\n+2BC57 Filename Length       003F (63)\n+2BC59 Extra Length          0000 (0)\n+2BC5B Comment Length        0000 (0)\n+2BC5D Disk Start            0000 (0)\n+2BC5F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BD70 Ext File Attributes   81A40000 (2175008768)\n+2BC61 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BD74 Local Header Offset   0000C6FE (50942)\n-2BD78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BC65 Local Header Offset   0000C601 (50689)\n+2BC69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BD78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BC69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BDB7 CENTRAL HEADER #53    02014B50 (33639248)\n-2BDBB Created Zip Spec      14 (20) '2.0'\n-2BDBC Created OS            03 (3) 'Unix'\n-2BDBD Extract Zip Spec      14 (20) '2.0'\n-2BDBE Extract OS            00 (0) 'MS-DOS'\n-2BDBF General Purpose Flag  0800 (2048)\n+2BCA8 CENTRAL HEADER #53    02014B50 (33639248)\n+2BCAC Created Zip Spec      14 (20) '2.0'\n+2BCAD Created OS            03 (3) 'Unix'\n+2BCAE Extract Zip Spec      14 (20) '2.0'\n+2BCAF Extract OS            00 (0) 'MS-DOS'\n+2BCB0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BDC1 Compression Method    0008 (8) 'Deflated'\n-2BDC3 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BDC7 CRC                   950F3569 (2500801897)\n-2BDCB Compressed Size       00001A2B (6699)\n-2BDCF Uncompressed Size     000058D8 (22744)\n-2BDD3 Filename Length       003A (58)\n-2BDD5 Extra Length          0000 (0)\n-2BDD7 Comment Length        0000 (0)\n-2BDD9 Disk Start            0000 (0)\n-2BDDB Int File Attributes   0000 (0)\n+2BCB2 Compression Method    0008 (8) 'Deflated'\n+2BCB4 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BCB8 CRC                   950F3569 (2500801897)\n+2BCBC Compressed Size       00001A2B (6699)\n+2BCC0 Uncompressed Size     000058D8 (22744)\n+2BCC4 Filename Length       003A (58)\n+2BCC6 Extra Length          0000 (0)\n+2BCC8 Comment Length        0000 (0)\n+2BCCA Disk Start            0000 (0)\n+2BCCC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BDDD Ext File Attributes   81A40000 (2175008768)\n+2BCCE Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BDE1 Local Header Offset   0000DB38 (56120)\n-2BDE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BCD2 Local Header Offset   0000DA3B (55867)\n+2BCD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BDE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BCD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BE1F CENTRAL HEADER #54    02014B50 (33639248)\n-2BE23 Created Zip Spec      14 (20) '2.0'\n-2BE24 Created OS            03 (3) 'Unix'\n-2BE25 Extract Zip Spec      14 (20) '2.0'\n-2BE26 Extract OS            00 (0) 'MS-DOS'\n-2BE27 General Purpose Flag  0800 (2048)\n+2BD10 CENTRAL HEADER #54    02014B50 (33639248)\n+2BD14 Created Zip Spec      14 (20) '2.0'\n+2BD15 Created OS            03 (3) 'Unix'\n+2BD16 Extract Zip Spec      14 (20) '2.0'\n+2BD17 Extract OS            00 (0) 'MS-DOS'\n+2BD18 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BE29 Compression Method    0008 (8) 'Deflated'\n-2BE2B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BE2F CRC                   78DAFB34 (2027617076)\n-2BE33 Compressed Size       00001343 (4931)\n-2BE37 Uncompressed Size     000041D8 (16856)\n-2BE3B Filename Length       003C (60)\n-2BE3D Extra Length          0000 (0)\n-2BE3F Comment Length        0000 (0)\n-2BE41 Disk Start            0000 (0)\n-2BE43 Int File Attributes   0000 (0)\n+2BD1A Compression Method    0008 (8) 'Deflated'\n+2BD1C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BD20 CRC                   78DAFB34 (2027617076)\n+2BD24 Compressed Size       00001343 (4931)\n+2BD28 Uncompressed Size     000041D8 (16856)\n+2BD2C Filename Length       003C (60)\n+2BD2E Extra Length          0000 (0)\n+2BD30 Comment Length        0000 (0)\n+2BD32 Disk Start            0000 (0)\n+2BD34 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BE45 Ext File Attributes   81A40000 (2175008768)\n+2BD36 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BE49 Local Header Offset   0000F5BB (62907)\n-2BE4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BD3A Local Header Offset   0000F4BE (62654)\n+2BD3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BE4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BD3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BE89 CENTRAL HEADER #55    02014B50 (33639248)\n-2BE8D Created Zip Spec      14 (20) '2.0'\n-2BE8E Created OS            03 (3) 'Unix'\n-2BE8F Extract Zip Spec      14 (20) '2.0'\n-2BE90 Extract OS            00 (0) 'MS-DOS'\n-2BE91 General Purpose Flag  0800 (2048)\n+2BD7A CENTRAL HEADER #55    02014B50 (33639248)\n+2BD7E Created Zip Spec      14 (20) '2.0'\n+2BD7F Created OS            03 (3) 'Unix'\n+2BD80 Extract Zip Spec      14 (20) '2.0'\n+2BD81 Extract OS            00 (0) 'MS-DOS'\n+2BD82 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BE93 Compression Method    0008 (8) 'Deflated'\n-2BE95 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BE99 CRC                   BAB7DC59 (3132611673)\n-2BE9D Compressed Size       000012BE (4798)\n-2BEA1 Uncompressed Size     0000327C (12924)\n-2BEA5 Filename Length       003C (60)\n-2BEA7 Extra Length          0000 (0)\n-2BEA9 Comment Length        0000 (0)\n-2BEAB Disk Start            0000 (0)\n-2BEAD Int File Attributes   0000 (0)\n+2BD84 Compression Method    0008 (8) 'Deflated'\n+2BD86 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BD8A CRC                   BAB7DC59 (3132611673)\n+2BD8E Compressed Size       000012BE (4798)\n+2BD92 Uncompressed Size     0000327C (12924)\n+2BD96 Filename Length       003C (60)\n+2BD98 Extra Length          0000 (0)\n+2BD9A Comment Length        0000 (0)\n+2BD9C Disk Start            0000 (0)\n+2BD9E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BEAF Ext File Attributes   81A40000 (2175008768)\n+2BDA0 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BEB3 Local Header Offset   00010958 (67928)\n-2BEB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BDA4 Local Header Offset   0001085B (67675)\n+2BDA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BEB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BDA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BEF3 CENTRAL HEADER #56    02014B50 (33639248)\n-2BEF7 Created Zip Spec      14 (20) '2.0'\n-2BEF8 Created OS            03 (3) 'Unix'\n-2BEF9 Extract Zip Spec      14 (20) '2.0'\n-2BEFA Extract OS            00 (0) 'MS-DOS'\n-2BEFB General Purpose Flag  0800 (2048)\n+2BDE4 CENTRAL HEADER #56    02014B50 (33639248)\n+2BDE8 Created Zip Spec      14 (20) '2.0'\n+2BDE9 Created OS            03 (3) 'Unix'\n+2BDEA Extract Zip Spec      14 (20) '2.0'\n+2BDEB Extract OS            00 (0) 'MS-DOS'\n+2BDEC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BEFD Compression Method    0008 (8) 'Deflated'\n-2BEFF Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BF03 CRC                   24DF140F (618599439)\n-2BF07 Compressed Size       00001588 (5512)\n-2BF0B Uncompressed Size     00004B98 (19352)\n-2BF0F Filename Length       003C (60)\n-2BF11 Extra Length          0000 (0)\n-2BF13 Comment Length        0000 (0)\n-2BF15 Disk Start            0000 (0)\n-2BF17 Int File Attributes   0000 (0)\n+2BDEE Compression Method    0008 (8) 'Deflated'\n+2BDF0 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BDF4 CRC                   24DF140F (618599439)\n+2BDF8 Compressed Size       00001588 (5512)\n+2BDFC Uncompressed Size     00004B98 (19352)\n+2BE00 Filename Length       003C (60)\n+2BE02 Extra Length          0000 (0)\n+2BE04 Comment Length        0000 (0)\n+2BE06 Disk Start            0000 (0)\n+2BE08 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BF19 Ext File Attributes   81A40000 (2175008768)\n+2BE0A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BF1D Local Header Offset   00011C70 (72816)\n-2BF21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BE0E Local Header Offset   00011B73 (72563)\n+2BE12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BF21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BE12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BF5D CENTRAL HEADER #57    02014B50 (33639248)\n-2BF61 Created Zip Spec      14 (20) '2.0'\n-2BF62 Created OS            03 (3) 'Unix'\n-2BF63 Extract Zip Spec      14 (20) '2.0'\n-2BF64 Extract OS            00 (0) 'MS-DOS'\n-2BF65 General Purpose Flag  0800 (2048)\n+2BE4E CENTRAL HEADER #57    02014B50 (33639248)\n+2BE52 Created Zip Spec      14 (20) '2.0'\n+2BE53 Created OS            03 (3) 'Unix'\n+2BE54 Extract Zip Spec      14 (20) '2.0'\n+2BE55 Extract OS            00 (0) 'MS-DOS'\n+2BE56 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BF67 Compression Method    0008 (8) 'Deflated'\n-2BF69 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BF6D CRC                   321C2FD2 (840708050)\n-2BF71 Compressed Size       00001618 (5656)\n-2BF75 Uncompressed Size     000045B8 (17848)\n-2BF79 Filename Length       003A (58)\n-2BF7B Extra Length          0000 (0)\n-2BF7D Comment Length        0000 (0)\n-2BF7F Disk Start            0000 (0)\n-2BF81 Int File Attributes   0000 (0)\n+2BE58 Compression Method    0008 (8) 'Deflated'\n+2BE5A Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BE5E CRC                   321C2FD2 (840708050)\n+2BE62 Compressed Size       00001618 (5656)\n+2BE66 Uncompressed Size     000045B8 (17848)\n+2BE6A Filename Length       003A (58)\n+2BE6C Extra Length          0000 (0)\n+2BE6E Comment Length        0000 (0)\n+2BE70 Disk Start            0000 (0)\n+2BE72 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BF83 Ext File Attributes   81A40000 (2175008768)\n+2BE74 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BF87 Local Header Offset   00013252 (78418)\n-2BF8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BE78 Local Header Offset   00013155 (78165)\n+2BE7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BF8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BE7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2BFC5 CENTRAL HEADER #58    02014B50 (33639248)\n-2BFC9 Created Zip Spec      14 (20) '2.0'\n-2BFCA Created OS            03 (3) 'Unix'\n-2BFCB Extract Zip Spec      14 (20) '2.0'\n-2BFCC Extract OS            00 (0) 'MS-DOS'\n-2BFCD General Purpose Flag  0800 (2048)\n+2BEB6 CENTRAL HEADER #58    02014B50 (33639248)\n+2BEBA Created Zip Spec      14 (20) '2.0'\n+2BEBB Created OS            03 (3) 'Unix'\n+2BEBC Extract Zip Spec      14 (20) '2.0'\n+2BEBD Extract OS            00 (0) 'MS-DOS'\n+2BEBE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2BFCF Compression Method    0008 (8) 'Deflated'\n-2BFD1 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2BFD5 CRC                   3ECC3177 (1053569399)\n-2BFD9 Compressed Size       00001550 (5456)\n-2BFDD Uncompressed Size     000041E0 (16864)\n-2BFE1 Filename Length       003D (61)\n-2BFE3 Extra Length          0000 (0)\n-2BFE5 Comment Length        0000 (0)\n-2BFE7 Disk Start            0000 (0)\n-2BFE9 Int File Attributes   0000 (0)\n+2BEC0 Compression Method    0008 (8) 'Deflated'\n+2BEC2 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BEC6 CRC                   3ECC3177 (1053569399)\n+2BECA Compressed Size       00001550 (5456)\n+2BECE Uncompressed Size     000041E0 (16864)\n+2BED2 Filename Length       003D (61)\n+2BED4 Extra Length          0000 (0)\n+2BED6 Comment Length        0000 (0)\n+2BED8 Disk Start            0000 (0)\n+2BEDA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2BFEB Ext File Attributes   81A40000 (2175008768)\n+2BEDC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2BFEF Local Header Offset   000148C2 (84162)\n-2BFF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BEE0 Local Header Offset   000147C5 (83909)\n+2BEE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2BFF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BEE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C030 CENTRAL HEADER #59    02014B50 (33639248)\n-2C034 Created Zip Spec      14 (20) '2.0'\n-2C035 Created OS            03 (3) 'Unix'\n-2C036 Extract Zip Spec      14 (20) '2.0'\n-2C037 Extract OS            00 (0) 'MS-DOS'\n-2C038 General Purpose Flag  0800 (2048)\n+2BF21 CENTRAL HEADER #59    02014B50 (33639248)\n+2BF25 Created Zip Spec      14 (20) '2.0'\n+2BF26 Created OS            03 (3) 'Unix'\n+2BF27 Extract Zip Spec      14 (20) '2.0'\n+2BF28 Extract OS            00 (0) 'MS-DOS'\n+2BF29 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C03A Compression Method    0008 (8) 'Deflated'\n-2C03C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2C040 CRC                   54FC5C00 (1425824768)\n-2C044 Compressed Size       00000C7E (3198)\n-2C048 Uncompressed Size     00003AEC (15084)\n-2C04C Filename Length       003C (60)\n-2C04E Extra Length          0000 (0)\n-2C050 Comment Length        0000 (0)\n-2C052 Disk Start            0000 (0)\n-2C054 Int File Attributes   0000 (0)\n+2BF2B Compression Method    0008 (8) 'Deflated'\n+2BF2D Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BF31 CRC                   54FC5C00 (1425824768)\n+2BF35 Compressed Size       00000C7E (3198)\n+2BF39 Uncompressed Size     00003AEC (15084)\n+2BF3D Filename Length       003C (60)\n+2BF3F Extra Length          0000 (0)\n+2BF41 Comment Length        0000 (0)\n+2BF43 Disk Start            0000 (0)\n+2BF45 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2C056 Ext File Attributes   81A40000 (2175008768)\n+2BF47 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2C05A Local Header Offset   00015E6D (89709)\n-2C05E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BF4B Local Header Offset   00015D70 (89456)\n+2BF4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C05E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BF4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C09A CENTRAL HEADER #60    02014B50 (33639248)\n-2C09E Created Zip Spec      14 (20) '2.0'\n-2C09F Created OS            03 (3) 'Unix'\n-2C0A0 Extract Zip Spec      14 (20) '2.0'\n-2C0A1 Extract OS            00 (0) 'MS-DOS'\n-2C0A2 General Purpose Flag  0800 (2048)\n+2BF8B CENTRAL HEADER #60    02014B50 (33639248)\n+2BF8F Created Zip Spec      14 (20) '2.0'\n+2BF90 Created OS            03 (3) 'Unix'\n+2BF91 Extract Zip Spec      14 (20) '2.0'\n+2BF92 Extract OS            00 (0) 'MS-DOS'\n+2BF93 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C0A4 Compression Method    0008 (8) 'Deflated'\n-2C0A6 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2C0AA CRC                   F14BF548 (4048287048)\n-2C0AE Compressed Size       00000F68 (3944)\n-2C0B2 Uncompressed Size     00003E5C (15964)\n-2C0B6 Filename Length       003F (63)\n-2C0B8 Extra Length          0000 (0)\n-2C0BA Comment Length        0000 (0)\n-2C0BC Disk Start            0000 (0)\n-2C0BE Int File Attributes   0000 (0)\n+2BF95 Compression Method    0008 (8) 'Deflated'\n+2BF97 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2BF9B CRC                   F14BF548 (4048287048)\n+2BF9F Compressed Size       00000F68 (3944)\n+2BFA3 Uncompressed Size     00003E5C (15964)\n+2BFA7 Filename Length       003F (63)\n+2BFA9 Extra Length          0000 (0)\n+2BFAB Comment Length        0000 (0)\n+2BFAD Disk Start            0000 (0)\n+2BFAF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2C0C0 Ext File Attributes   81A40000 (2175008768)\n+2BFB1 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2C0C4 Local Header Offset   00016B45 (92997)\n-2C0C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2BFB5 Local Header Offset   00016A48 (92744)\n+2BFB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C0C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BFB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C107 CENTRAL HEADER #61    02014B50 (33639248)\n-2C10B Created Zip Spec      14 (20) '2.0'\n-2C10C Created OS            03 (3) 'Unix'\n-2C10D Extract Zip Spec      14 (20) '2.0'\n-2C10E Extract OS            00 (0) 'MS-DOS'\n-2C10F General Purpose Flag  0800 (2048)\n+2BFF8 CENTRAL HEADER #61    02014B50 (33639248)\n+2BFFC Created Zip Spec      14 (20) '2.0'\n+2BFFD Created OS            03 (3) 'Unix'\n+2BFFE Extract Zip Spec      14 (20) '2.0'\n+2BFFF Extract OS            00 (0) 'MS-DOS'\n+2C000 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C111 Compression Method    0008 (8) 'Deflated'\n-2C113 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2C117 CRC                   A2950D97 (2727677335)\n-2C11B Compressed Size       00008B34 (35636)\n-2C11F Uncompressed Size     0001C14B (115019)\n-2C123 Filename Length       003A (58)\n-2C125 Extra Length          0000 (0)\n-2C127 Comment Length        0000 (0)\n-2C129 Disk Start            0000 (0)\n-2C12B Int File Attributes   0000 (0)\n+2C002 Compression Method    0008 (8) 'Deflated'\n+2C004 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2C008 CRC                   A2950D97 (2727677335)\n+2C00C Compressed Size       00008B34 (35636)\n+2C010 Uncompressed Size     0001C14B (115019)\n+2C014 Filename Length       003A (58)\n+2C016 Extra Length          0000 (0)\n+2C018 Comment Length        0000 (0)\n+2C01A Disk Start            0000 (0)\n+2C01C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2C12D Ext File Attributes   81A40000 (2175008768)\n+2C01E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2C131 Local Header Offset   00017B0A (97034)\n-2C135 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C022 Local Header Offset   00017A0D (96781)\n+2C026 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C135: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C026: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C16F CENTRAL HEADER #62    02014B50 (33639248)\n-2C173 Created Zip Spec      14 (20) '2.0'\n-2C174 Created OS            03 (3) 'Unix'\n-2C175 Extract Zip Spec      14 (20) '2.0'\n-2C176 Extract OS            00 (0) 'MS-DOS'\n-2C177 General Purpose Flag  0800 (2048)\n+2C060 CENTRAL HEADER #62    02014B50 (33639248)\n+2C064 Created Zip Spec      14 (20) '2.0'\n+2C065 Created OS            03 (3) 'Unix'\n+2C066 Extract Zip Spec      14 (20) '2.0'\n+2C067 Extract OS            00 (0) 'MS-DOS'\n+2C068 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C179 Compression Method    0008 (8) 'Deflated'\n-2C17B Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2C17F CRC                   A327DAE4 (2737298148)\n-2C183 Compressed Size       000097F7 (38903)\n-2C187 Uncompressed Size     0001F855 (129109)\n-2C18B Filename Length       003D (61)\n-2C18D Extra Length          0000 (0)\n-2C18F Comment Length        0000 (0)\n-2C191 Disk Start            0000 (0)\n-2C193 Int File Attributes   0000 (0)\n+2C06A Compression Method    0008 (8) 'Deflated'\n+2C06C Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2C070 CRC                   A327DAE4 (2737298148)\n+2C074 Compressed Size       000097F7 (38903)\n+2C078 Uncompressed Size     0001F855 (129109)\n+2C07C Filename Length       003D (61)\n+2C07E Extra Length          0000 (0)\n+2C080 Comment Length        0000 (0)\n+2C082 Disk Start            0000 (0)\n+2C084 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2C195 Ext File Attributes   81A40000 (2175008768)\n+2C086 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2C199 Local Header Offset   00020696 (132758)\n-2C19D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C08A Local Header Offset   00020599 (132505)\n+2C08E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C19D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C08E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C1DA CENTRAL HEADER #63    02014B50 (33639248)\n-2C1DE Created Zip Spec      14 (20) '2.0'\n-2C1DF Created OS            03 (3) 'Unix'\n-2C1E0 Extract Zip Spec      14 (20) '2.0'\n-2C1E1 Extract OS            00 (0) 'MS-DOS'\n-2C1E2 General Purpose Flag  0800 (2048)\n+2C0CB CENTRAL HEADER #63    02014B50 (33639248)\n+2C0CF Created Zip Spec      14 (20) '2.0'\n+2C0D0 Created OS            03 (3) 'Unix'\n+2C0D1 Extract Zip Spec      14 (20) '2.0'\n+2C0D2 Extract OS            00 (0) 'MS-DOS'\n+2C0D3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C1E4 Compression Method    0008 (8) 'Deflated'\n-2C1E6 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2C1EA CRC                   E6B54850 (3870640208)\n-2C1EE Compressed Size       000000DD (221)\n-2C1F2 Uncompressed Size     000003A7 (935)\n-2C1F6 Filename Length       001E (30)\n-2C1F8 Extra Length          0000 (0)\n-2C1FA Comment Length        0000 (0)\n-2C1FC Disk Start            0000 (0)\n-2C1FE Int File Attributes   0000 (0)\n+2C0D5 Compression Method    0008 (8) 'Deflated'\n+2C0D7 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2C0DB CRC                   E6B54850 (3870640208)\n+2C0DF Compressed Size       000000DD (221)\n+2C0E3 Uncompressed Size     000003A7 (935)\n+2C0E7 Filename Length       001E (30)\n+2C0E9 Extra Length          0000 (0)\n+2C0EB Comment Length        0000 (0)\n+2C0ED Disk Start            0000 (0)\n+2C0EF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2C200 Ext File Attributes   81A40000 (2175008768)\n+2C0F1 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2C204 Local Header Offset   00029EE8 (171752)\n-2C208 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C0F5 Local Header Offset   00029DEB (171499)\n+2C0F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C208: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C0F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C226 CENTRAL HEADER #64    02014B50 (33639248)\n-2C22A Created Zip Spec      14 (20) '2.0'\n-2C22B Created OS            03 (3) 'Unix'\n-2C22C Extract Zip Spec      14 (20) '2.0'\n-2C22D Extract OS            00 (0) 'MS-DOS'\n-2C22E General Purpose Flag  0800 (2048)\n+2C117 CENTRAL HEADER #64    02014B50 (33639248)\n+2C11B Created Zip Spec      14 (20) '2.0'\n+2C11C Created OS            03 (3) 'Unix'\n+2C11D Extract Zip Spec      14 (20) '2.0'\n+2C11E Extract OS            00 (0) 'MS-DOS'\n+2C11F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C230 Compression Method    0008 (8) 'Deflated'\n-2C232 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2C236 CRC                   F12C1C87 (4046199943)\n-2C23A Compressed Size       00000B89 (2953)\n-2C23E Uncompressed Size     00003863 (14435)\n-2C242 Filename Length       0031 (49)\n-2C244 Extra Length          0000 (0)\n-2C246 Comment Length        0000 (0)\n-2C248 Disk Start            0000 (0)\n-2C24A Int File Attributes   0000 (0)\n+2C121 Compression Method    0008 (8) 'Deflated'\n+2C123 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2C127 CRC                   93833A61 (2474850913)\n+2C12B Compressed Size       00000B77 (2935)\n+2C12F Uncompressed Size     00003702 (14082)\n+2C133 Filename Length       0031 (49)\n+2C135 Extra Length          0000 (0)\n+2C137 Comment Length        0000 (0)\n+2C139 Disk Start            0000 (0)\n+2C13B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2C24C Ext File Attributes   81A40000 (2175008768)\n+2C13D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2C250 Local Header Offset   0002A001 (172033)\n-2C254 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C141 Local Header Offset   00029F04 (171780)\n+2C145 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C254: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C145: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C285 CENTRAL HEADER #65    02014B50 (33639248)\n-2C289 Created Zip Spec      14 (20) '2.0'\n-2C28A Created OS            03 (3) 'Unix'\n-2C28B Extract Zip Spec      14 (20) '2.0'\n-2C28C Extract OS            00 (0) 'MS-DOS'\n-2C28D General Purpose Flag  0800 (2048)\n+2C176 CENTRAL HEADER #65    02014B50 (33639248)\n+2C17A Created Zip Spec      14 (20) '2.0'\n+2C17B Created OS            03 (3) 'Unix'\n+2C17C Extract Zip Spec      14 (20) '2.0'\n+2C17D Extract OS            00 (0) 'MS-DOS'\n+2C17E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C28F Compression Method    0008 (8) 'Deflated'\n-2C291 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n-2C295 CRC                   42D8FD00 (1121516800)\n-2C299 Compressed Size       00000038 (56)\n-2C29D Uncompressed Size     0000003C (60)\n-2C2A1 Filename Length       0038 (56)\n-2C2A3 Extra Length          0000 (0)\n-2C2A5 Comment Length        0000 (0)\n-2C2A7 Disk Start            0000 (0)\n-2C2A9 Int File Attributes   0000 (0)\n+2C180 Compression Method    0008 (8) 'Deflated'\n+2C182 Modification Time     52F769B6 (1391946166) 'Fri Jul 23 13:13:44 2021'\n+2C186 CRC                   42D8FD00 (1121516800)\n+2C18A Compressed Size       00000038 (56)\n+2C18E Uncompressed Size     0000003C (60)\n+2C192 Filename Length       0038 (56)\n+2C194 Extra Length          0000 (0)\n+2C196 Comment Length        0000 (0)\n+2C198 Disk Start            0000 (0)\n+2C19A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-2C2AB Ext File Attributes   81A40000 (2175008768)\n+2C19C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-2C2AF Local Header Offset   0002ABD9 (175065)\n-2C2B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C1A0 Local Header Offset   0002AACA (174794)\n+2C1A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C2B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C1A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-2C2EB END CENTRAL HEADER    06054B50 (101010256)\n-2C2EF Number of this disk   0000 (0)\n-2C2F1 Central Dir Disk no   0000 (0)\n-2C2F3 Entries in this disk  0041 (65)\n-2C2F5 Total Entries         0041 (65)\n-2C2F7 Size of Central Dir   00001684 (5764)\n-2C2FB Offset to Central Dir 0002AC67 (175207)\n-2C2FF Comment Length        0000 (0)\n+2C1DC END CENTRAL HEADER    06054B50 (101010256)\n+2C1E0 Number of this disk   0000 (0)\n+2C1E2 Central Dir Disk no   0000 (0)\n+2C1E4 Entries in this disk  0041 (65)\n+2C1E6 Total Entries         0041 (65)\n+2C1E8 Size of Central Dir   00001684 (5764)\n+2C1EC Offset to Central Dir 0002AB58 (174936)\n+2C1F0 Comment Length        0000 (0)\n #\n # Error Count: 28\n # Warning Count: 158\n #\n # Done\n"}, {"source1": "org/fusesource/jansi/Ansi.java", "source2": "org/fusesource/jansi/Ansi.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,948 +1,948 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.util.ArrayList;\r\n-import java.util.concurrent.Callable;\r\n-\r\n-/**\r\n- * Provides a fluent API for generating\r\n- * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">ANSI escape sequences</a>.\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @since 1.0\r\n- */\r\n-public class Ansi implements Appendable {\r\n-\r\n-    private static final char FIRST_ESC_CHAR = 27;\r\n-    private static final char SECOND_ESC_CHAR = '[';\r\n-\r\n-    /**\r\n-     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\">ANSI 8 colors</a> for fluent API\r\n-     */\r\n-    public enum Color {\r\n-        BLACK(0, \"BLACK\"),\r\n-        RED(1, \"RED\"),\r\n-        GREEN(2, \"GREEN\"),\r\n-        YELLOW(3, \"YELLOW\"),\r\n-        BLUE(4, \"BLUE\"),\r\n-        MAGENTA(5, \"MAGENTA\"),\r\n-        CYAN(6, \"CYAN\"),\r\n-        WHITE(7, \"WHITE\"),\r\n-        DEFAULT(9, \"DEFAULT\");\r\n-\r\n-        private final int value;\r\n-        private final String name;\r\n-\r\n-        Color(int index, String name) {\r\n-            this.value = index;\r\n-            this.name = name;\r\n-        }\r\n-\r\n-        @Override\r\n-        public String toString() {\r\n-            return name;\r\n-        }\r\n-\r\n-        public int value() {\r\n-            return value;\r\n-        }\r\n-\r\n-        public int fg() {\r\n-            return value + 30;\r\n-        }\r\n-\r\n-        public int bg() {\r\n-            return value + 40;\r\n-        }\r\n-\r\n-        public int fgBright() {\r\n-            return value + 90;\r\n-        }\r\n-\r\n-        public int bgBright() {\r\n-            return value + 100;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Display attributes, also know as\r\n-     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters\">SGR\r\n-     * (Select Graphic Rendition) parameters</a>.\r\n-     */\r\n-    public enum Attribute {\r\n-        RESET(0, \"RESET\"),\r\n-        INTENSITY_BOLD(1, \"INTENSITY_BOLD\"),\r\n-        INTENSITY_FAINT(2, \"INTENSITY_FAINT\"),\r\n-        ITALIC(3, \"ITALIC_ON\"),\r\n-        UNDERLINE(4, \"UNDERLINE_ON\"),\r\n-        BLINK_SLOW(5, \"BLINK_SLOW\"),\r\n-        BLINK_FAST(6, \"BLINK_FAST\"),\r\n-        NEGATIVE_ON(7, \"NEGATIVE_ON\"),\r\n-        CONCEAL_ON(8, \"CONCEAL_ON\"),\r\n-        STRIKETHROUGH_ON(9, \"STRIKETHROUGH_ON\"),\r\n-        UNDERLINE_DOUBLE(21, \"UNDERLINE_DOUBLE\"),\r\n-        INTENSITY_BOLD_OFF(22, \"INTENSITY_BOLD_OFF\"),\r\n-        ITALIC_OFF(23, \"ITALIC_OFF\"),\r\n-        UNDERLINE_OFF(24, \"UNDERLINE_OFF\"),\r\n-        BLINK_OFF(25, \"BLINK_OFF\"),\r\n-        NEGATIVE_OFF(27, \"NEGATIVE_OFF\"),\r\n-        CONCEAL_OFF(28, \"CONCEAL_OFF\"),\r\n-        STRIKETHROUGH_OFF(29, \"STRIKETHROUGH_OFF\");\r\n-\r\n-        private final int value;\r\n-        private final String name;\r\n-\r\n-        Attribute(int index, String name) {\r\n-            this.value = index;\r\n-            this.name = name;\r\n-        }\r\n-\r\n-        @Override\r\n-        public String toString() {\r\n-            return name;\r\n-        }\r\n-\r\n-        public int value() {\r\n-            return value;\r\n-        }\r\n-\r\n-    }\r\n-\r\n-    /**\r\n-     * ED (Erase in Display) / EL (Erase in Line) parameter (see\r\n-     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">CSI sequence J and K</a>)\r\n-     * @see Ansi#eraseScreen(Erase)\r\n-     * @see Ansi#eraseLine(Erase)\r\n-     */\r\n-    public enum Erase {\r\n-        FORWARD(0, \"FORWARD\"),\r\n-        BACKWARD(1, \"BACKWARD\"),\r\n-        ALL(2, \"ALL\");\r\n-\r\n-        private final int value;\r\n-        private final String name;\r\n-\r\n-        Erase(int index, String name) {\r\n-            this.value = index;\r\n-            this.name = name;\r\n-        }\r\n-\r\n-        @Override\r\n-        public String toString() {\r\n-            return name;\r\n-        }\r\n-\r\n-        public int value() {\r\n-            return value;\r\n-        }\r\n-    }\r\n-\r\n-    public interface Consumer {\r\n-        void apply(Ansi ansi);\r\n-    }\r\n-\r\n-    public static final String DISABLE = Ansi.class.getName() + \".disable\";\r\n-\r\n-    private static Callable<Boolean> detector = new Callable<Boolean>() {\r\n-        public Boolean call() throws Exception {\r\n-            return !Boolean.getBoolean(DISABLE);\r\n-        }\r\n-    };\r\n-\r\n-    public static void setDetector(final Callable<Boolean> detector) {\r\n-        if (detector == null) throw new IllegalArgumentException();\r\n-        Ansi.detector = detector;\r\n-    }\r\n-\r\n-    public static boolean isDetected() {\r\n-        try {\r\n-            return detector.call();\r\n-        } catch (Exception e) {\r\n-            return true;\r\n-        }\r\n-    }\r\n-\r\n-    private static final InheritableThreadLocal<Boolean> holder = new InheritableThreadLocal<Boolean>() {\r\n-        @Override\r\n-        protected Boolean initialValue() {\r\n-            return isDetected();\r\n-        }\r\n-    };\r\n-\r\n-    public static void setEnabled(final boolean flag) {\r\n-        holder.set(flag);\r\n-    }\r\n-\r\n-    public static boolean isEnabled() {\r\n-        return holder.get();\r\n-    }\r\n-\r\n-    public static Ansi ansi() {\r\n-        if (isEnabled()) {\r\n-            return new Ansi();\r\n-        } else {\r\n-            return new NoAnsi();\r\n-        }\r\n-    }\r\n-\r\n-    public static Ansi ansi(StringBuilder builder) {\r\n-        if (isEnabled()) {\r\n-            return new Ansi(builder);\r\n-        } else {\r\n-            return new NoAnsi(builder);\r\n-        }\r\n-    }\r\n-\r\n-    public static Ansi ansi(int size) {\r\n-        if (isEnabled()) {\r\n-            return new Ansi(size);\r\n-        } else {\r\n-            return new NoAnsi(size);\r\n-        }\r\n-    }\r\n-\r\n-    private static class NoAnsi\r\n-            extends Ansi {\r\n-        public NoAnsi() {\r\n-            super();\r\n-        }\r\n-\r\n-        public NoAnsi(int size) {\r\n-            super(size);\r\n-        }\r\n-\r\n-        public NoAnsi(StringBuilder builder) {\r\n-            super(builder);\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fg(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bg(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fgBright(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bgBright(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fg(int color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fgRgb(int r, int g, int b) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bg(int color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bgRgb(int r, int g, int b) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi a(Attribute attribute) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursor(int row, int column) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorToColumn(int x) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorUp(int y) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorRight(int x) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorDown(int y) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorLeft(int x) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorDownLine() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorDownLine(final int n) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorUpLine() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorUpLine(final int n) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseScreen() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseScreen(Erase kind) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseLine() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseLine(Erase kind) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi scrollUp(int rows) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi scrollDown(int rows) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi saveCursorPosition() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        @Deprecated\r\n-        public Ansi restorCursorPosition() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi restoreCursorPosition() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi reset() {\r\n-            return this;\r\n-        }\r\n-    }\r\n-\r\n-    private final StringBuilder builder;\r\n-    private final ArrayList<Integer> attributeOptions = new ArrayList<Integer>(5);\r\n-\r\n-    public Ansi() {\r\n-        this(new StringBuilder(80));\r\n-    }\r\n-\r\n-    public Ansi(Ansi parent) {\r\n-        this(new StringBuilder(parent.builder));\r\n-        attributeOptions.addAll(parent.attributeOptions);\r\n-    }\r\n-\r\n-    public Ansi(int size) {\r\n-        this(new StringBuilder(size));\r\n-    }\r\n-\r\n-    public Ansi(StringBuilder builder) {\r\n-        this.builder = builder;\r\n-    }\r\n-\r\n-    public Ansi fg(Color color) {\r\n-        attributeOptions.add(color.fg());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fg(int color) {\r\n-        attributeOptions.add(38);\r\n-        attributeOptions.add(5);\r\n-        attributeOptions.add(color & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fgRgb(int color) {\r\n-        return fgRgb(color >> 16, color >> 8, color);\r\n-    }\r\n-\r\n-    public Ansi fgRgb(int r, int g, int b) {\r\n-        attributeOptions.add(38);\r\n-        attributeOptions.add(2);\r\n-        attributeOptions.add(r & 0xff);\r\n-        attributeOptions.add(g & 0xff);\r\n-        attributeOptions.add(b & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fgBlack() {\r\n-        return this.fg(Color.BLACK);\r\n-    }\r\n-\r\n-    public Ansi fgBlue() {\r\n-        return this.fg(Color.BLUE);\r\n-    }\r\n-\r\n-    public Ansi fgCyan() {\r\n-        return this.fg(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi fgDefault() {\r\n-        return this.fg(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi fgGreen() {\r\n-        return this.fg(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi fgMagenta() {\r\n-        return this.fg(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi fgRed() {\r\n-        return this.fg(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi fgYellow() {\r\n-        return this.fg(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi bg(Color color) {\r\n-        attributeOptions.add(color.bg());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bg(int color) {\r\n-        attributeOptions.add(48);\r\n-        attributeOptions.add(5);\r\n-        attributeOptions.add(color & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bgRgb(int color) {\r\n-        return bgRgb(color >> 16, color >> 8, color);\r\n-    }\r\n-\r\n-    public Ansi bgRgb(int r, int g, int b) {\r\n-        attributeOptions.add(48);\r\n-        attributeOptions.add(2);\r\n-        attributeOptions.add(r & 0xff);\r\n-        attributeOptions.add(g & 0xff);\r\n-        attributeOptions.add(b & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bgCyan() {\r\n-        return this.bg(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi bgDefault() {\r\n-        return this.bg(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi bgGreen() {\r\n-        return this.bg(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi bgMagenta() {\r\n-        return this.bg(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi bgRed() {\r\n-        return this.bg(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi bgYellow() {\r\n-        return this.bg(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi fgBright(Color color) {\r\n-        attributeOptions.add(color.fgBright());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fgBrightBlack() {\r\n-        return this.fgBright(Color.BLACK);\r\n-    }\r\n-\r\n-    public Ansi fgBrightBlue() {\r\n-        return this.fgBright(Color.BLUE);\r\n-    }\r\n-\r\n-    public Ansi fgBrightCyan() {\r\n-        return this.fgBright(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi fgBrightDefault() {\r\n-        return this.fgBright(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi fgBrightGreen() {\r\n-        return this.fgBright(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi fgBrightMagenta() {\r\n-        return this.fgBright(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi fgBrightRed() {\r\n-        return this.fgBright(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi fgBrightYellow() {\r\n-        return this.fgBright(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi bgBright(Color color) {\r\n-        attributeOptions.add(color.bgBright());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bgBrightCyan() {\r\n-        return this.bgBright(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi bgBrightDefault() {\r\n-        return this.bgBright(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi bgBrightGreen() {\r\n-        return this.bgBright(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi bgBrightMagenta() {\r\n-        return this.bgBright(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi bgBrightRed() {\r\n-        return this.bgBright(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi bgBrightYellow() {\r\n-        return this.bgBright(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi a(Attribute attribute) {\r\n-        attributeOptions.add(attribute.value());\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to row n, column m. The values are 1-based.\r\n-     * Any values less than 1 are mapped to 1.\r\n-     *\r\n-     * @param row    row (1-based) from top\r\n-     * @param column column (1 based) from left\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursor(final int row, final int column) {\r\n-        return appendEscapeSequence('H', Math.max(1, row), Math.max(1, column));\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to column n. The parameter n is 1-based.\r\n-     * If n is less than 1 it is moved to the first column.\r\n-     *\r\n-     * @param x the index (1-based) of the column to move to\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorToColumn(final int x) {\r\n-        return appendEscapeSequence('G', Math.max(1, x));\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor up. If the parameter y is negative it moves the cursor down.\r\n-     *\r\n-     * @param y the number of lines to move up\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorUp(final int y) {\r\n-        return y > 0 ? appendEscapeSequence('A', y) : y < 0 ? cursorDown(-y) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor down. If the parameter y is negative it moves the cursor up.\r\n-     *\r\n-     * @param y the number of lines to move down\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorDown(final int y) {\r\n-        return y > 0 ? appendEscapeSequence('B', y) : y < 0 ? cursorUp(-y) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor right. If the parameter x is negative it moves the cursor left.\r\n-     *\r\n-     * @param x the number of characters to move right\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorRight(final int x) {\r\n-        return x > 0 ? appendEscapeSequence('C', x) : x < 0 ? cursorLeft(-x) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor left. If the parameter x is negative it moves the cursor right.\r\n-     *\r\n-     * @param x the number of characters to move left\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorLeft(final int x) {\r\n-        return x > 0 ? appendEscapeSequence('D', x) : x < 0 ? cursorRight(-x) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor relative to the current position. The cursor is moved right if x is\r\n-     * positive, left if negative and down if y is positive and up if negative.\r\n-     *\r\n-     * @param x the number of characters to move horizontally\r\n-     * @param y the number of lines to move vertically\r\n-     * @return this Ansi instance\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi cursorMove(final int x, final int y) {\r\n-        return cursorRight(x).cursorDown(y);\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the line below.\r\n-     *\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorDownLine() {\r\n-        return appendEscapeSequence('E');\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the n-th line below. If the parameter n is negative it\r\n-     * moves the cursor to the beginning of the n-th line above.\r\n-     *\r\n-     * @param n the number of lines to move the cursor\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorDownLine(final int n) {\r\n-        return n < 0 ? cursorUpLine(-n) : appendEscapeSequence('E', n);\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the line above.\r\n-     *\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorUpLine() {\r\n-        return appendEscapeSequence('F');\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the n-th line above. If the parameter n is negative it\r\n-     * moves the cursor to the beginning of the n-th line below.\r\n-     *\r\n-     * @param n the number of lines to move the cursor\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorUpLine(final int n) {\r\n-        return n < 0 ? cursorDownLine(-n) : appendEscapeSequence('F', n);\r\n-    }\r\n-\r\n-    public Ansi eraseScreen() {\r\n-        return appendEscapeSequence('J', Erase.ALL.value());\r\n-    }\r\n-\r\n-    public Ansi eraseScreen(final Erase kind) {\r\n-        return appendEscapeSequence('J', kind.value());\r\n-    }\r\n-\r\n-    public Ansi eraseLine() {\r\n-        return appendEscapeSequence('K');\r\n-    }\r\n-\r\n-    public Ansi eraseLine(final Erase kind) {\r\n-        return appendEscapeSequence('K', kind.value());\r\n-    }\r\n-\r\n-    public Ansi scrollUp(final int rows) {\r\n-        return rows > 0 ? appendEscapeSequence('S', rows) : rows < 0 ? scrollDown(-rows) : this;\r\n-    }\r\n-\r\n-    public Ansi scrollDown(final int rows) {\r\n-        return rows > 0 ? appendEscapeSequence('T', rows) : rows < 0 ? scrollUp(-rows) : this;\r\n-    }\r\n-\r\n-    public Ansi saveCursorPosition() {\r\n-        return appendEscapeSequence('s');\r\n-    }\r\n-\r\n-    @Deprecated\r\n-    public Ansi restorCursorPosition() {\r\n-        return appendEscapeSequence('u');\r\n-    }\r\n-\r\n-    public Ansi restoreCursorPosition() {\r\n-        return appendEscapeSequence('u');\r\n-    }\r\n-\r\n-    public Ansi reset() {\r\n-        return a(Attribute.RESET);\r\n-    }\r\n-\r\n-    public Ansi bold() {\r\n-        return a(Attribute.INTENSITY_BOLD);\r\n-    }\r\n-\r\n-    public Ansi boldOff() {\r\n-        return a(Attribute.INTENSITY_BOLD_OFF);\r\n-    }\r\n-\r\n-    public Ansi a(String value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(boolean value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(char value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(char[] value, int offset, int len) {\r\n-        flushAttributes();\r\n-        builder.append(value, offset, len);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(char[] value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(CharSequence value, int start, int end) {\r\n-        flushAttributes();\r\n-        builder.append(value, start, end);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(CharSequence value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(double value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(float value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(int value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(long value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(Object value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(StringBuffer value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi newline() {\r\n-        flushAttributes();\r\n-        builder.append(System.getProperty(\"line.separator\"));\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi format(String pattern, Object... args) {\r\n-        flushAttributes();\r\n-        builder.append(String.format(pattern, args));\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Applies another function to this Ansi instance.\r\n-     *\r\n-     * @param fun the function to apply\r\n-     * @return this Ansi instance\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi apply(Consumer fun) {\r\n-        fun.apply(this);\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Uses the {@link AnsiRenderer}\r\n-     * to generate the ANSI escape sequences for the supplied text.\r\n-     *\r\n-     * @param text text\r\n-     * @return this\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi render(final String text) {\r\n-        a(AnsiRenderer.render(text));\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * String formats and renders the supplied arguments.  Uses the {@link AnsiRenderer}\r\n-     * to generate the ANSI escape sequences.\r\n-     *\r\n-     * @param text format\r\n-     * @param args arguments\r\n-     * @return this\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi render(final String text, Object... args) {\r\n-        a(String.format(AnsiRenderer.render(text), args));\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public String toString() {\r\n-        flushAttributes();\r\n-        return builder.toString();\r\n-    }\r\n-\r\n-    ///////////////////////////////////////////////////////////////////\r\n-    // Private Helper Methods\r\n-    ///////////////////////////////////////////////////////////////////\r\n-\r\n-    private Ansi appendEscapeSequence(char command) {\r\n-        flushAttributes();\r\n-        builder.append(FIRST_ESC_CHAR);\r\n-        builder.append(SECOND_ESC_CHAR);\r\n-        builder.append(command);\r\n-        return this;\r\n-    }\r\n-\r\n-    private Ansi appendEscapeSequence(char command, int option) {\r\n-        flushAttributes();\r\n-        builder.append(FIRST_ESC_CHAR);\r\n-        builder.append(SECOND_ESC_CHAR);\r\n-        builder.append(option);\r\n-        builder.append(command);\r\n-        return this;\r\n-    }\r\n-\r\n-    private Ansi appendEscapeSequence(char command, Object... options) {\r\n-        flushAttributes();\r\n-        return _appendEscapeSequence(command, options);\r\n-    }\r\n-\r\n-    private void flushAttributes() {\r\n-        if (attributeOptions.isEmpty())\r\n-            return;\r\n-        if (attributeOptions.size() == 1 && attributeOptions.get(0) == 0) {\r\n-            builder.append(FIRST_ESC_CHAR);\r\n-            builder.append(SECOND_ESC_CHAR);\r\n-            builder.append('m');\r\n-        } else {\r\n-            _appendEscapeSequence('m', attributeOptions.toArray());\r\n-        }\r\n-        attributeOptions.clear();\r\n-    }\r\n-\r\n-    private Ansi _appendEscapeSequence(char command, Object... options) {\r\n-        builder.append(FIRST_ESC_CHAR);\r\n-        builder.append(SECOND_ESC_CHAR);\r\n-        int size = options.length;\r\n-        for (int i = 0; i < size; i++) {\r\n-            if (i != 0) {\r\n-                builder.append(';');\r\n-            }\r\n-            if (options[i] != null) {\r\n-                builder.append(options[i]);\r\n-            }\r\n-        }\r\n-        builder.append(command);\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public Ansi append(CharSequence csq) {\r\n-        builder.append(csq);\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public Ansi append(CharSequence csq, int start, int end) {\r\n-        builder.append(csq, start, end);\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public Ansi append(char c) {\r\n-        builder.append(c);\r\n-        return this;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.util.ArrayList;\n+import java.util.concurrent.Callable;\n+\n+/**\n+ * Provides a fluent API for generating\n+ * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">ANSI escape sequences</a>.\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @since 1.0\n+ */\n+public class Ansi implements Appendable {\n+\n+    private static final char FIRST_ESC_CHAR = 27;\n+    private static final char SECOND_ESC_CHAR = '[';\n+\n+    /**\n+     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\">ANSI 8 colors</a> for fluent API\n+     */\n+    public enum Color {\n+        BLACK(0, \"BLACK\"),\n+        RED(1, \"RED\"),\n+        GREEN(2, \"GREEN\"),\n+        YELLOW(3, \"YELLOW\"),\n+        BLUE(4, \"BLUE\"),\n+        MAGENTA(5, \"MAGENTA\"),\n+        CYAN(6, \"CYAN\"),\n+        WHITE(7, \"WHITE\"),\n+        DEFAULT(9, \"DEFAULT\");\n+\n+        private final int value;\n+        private final String name;\n+\n+        Color(int index, String name) {\n+            this.value = index;\n+            this.name = name;\n+        }\n+\n+        @Override\n+        public String toString() {\n+            return name;\n+        }\n+\n+        public int value() {\n+            return value;\n+        }\n+\n+        public int fg() {\n+            return value + 30;\n+        }\n+\n+        public int bg() {\n+            return value + 40;\n+        }\n+\n+        public int fgBright() {\n+            return value + 90;\n+        }\n+\n+        public int bgBright() {\n+            return value + 100;\n+        }\n+    }\n+\n+    /**\n+     * Display attributes, also know as\n+     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters\">SGR\n+     * (Select Graphic Rendition) parameters</a>.\n+     */\n+    public enum Attribute {\n+        RESET(0, \"RESET\"),\n+        INTENSITY_BOLD(1, \"INTENSITY_BOLD\"),\n+        INTENSITY_FAINT(2, \"INTENSITY_FAINT\"),\n+        ITALIC(3, \"ITALIC_ON\"),\n+        UNDERLINE(4, \"UNDERLINE_ON\"),\n+        BLINK_SLOW(5, \"BLINK_SLOW\"),\n+        BLINK_FAST(6, \"BLINK_FAST\"),\n+        NEGATIVE_ON(7, \"NEGATIVE_ON\"),\n+        CONCEAL_ON(8, \"CONCEAL_ON\"),\n+        STRIKETHROUGH_ON(9, \"STRIKETHROUGH_ON\"),\n+        UNDERLINE_DOUBLE(21, \"UNDERLINE_DOUBLE\"),\n+        INTENSITY_BOLD_OFF(22, \"INTENSITY_BOLD_OFF\"),\n+        ITALIC_OFF(23, \"ITALIC_OFF\"),\n+        UNDERLINE_OFF(24, \"UNDERLINE_OFF\"),\n+        BLINK_OFF(25, \"BLINK_OFF\"),\n+        NEGATIVE_OFF(27, \"NEGATIVE_OFF\"),\n+        CONCEAL_OFF(28, \"CONCEAL_OFF\"),\n+        STRIKETHROUGH_OFF(29, \"STRIKETHROUGH_OFF\");\n+\n+        private final int value;\n+        private final String name;\n+\n+        Attribute(int index, String name) {\n+            this.value = index;\n+            this.name = name;\n+        }\n+\n+        @Override\n+        public String toString() {\n+            return name;\n+        }\n+\n+        public int value() {\n+            return value;\n+        }\n+\n+    }\n+\n+    /**\n+     * ED (Erase in Display) / EL (Erase in Line) parameter (see\n+     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">CSI sequence J and K</a>)\n+     * @see Ansi#eraseScreen(Erase)\n+     * @see Ansi#eraseLine(Erase)\n+     */\n+    public enum Erase {\n+        FORWARD(0, \"FORWARD\"),\n+        BACKWARD(1, \"BACKWARD\"),\n+        ALL(2, \"ALL\");\n+\n+        private final int value;\n+        private final String name;\n+\n+        Erase(int index, String name) {\n+            this.value = index;\n+            this.name = name;\n+        }\n+\n+        @Override\n+        public String toString() {\n+            return name;\n+        }\n+\n+        public int value() {\n+            return value;\n+        }\n+    }\n+\n+    public interface Consumer {\n+        void apply(Ansi ansi);\n+    }\n+\n+    public static final String DISABLE = Ansi.class.getName() + \".disable\";\n+\n+    private static Callable<Boolean> detector = new Callable<Boolean>() {\n+        public Boolean call() throws Exception {\n+            return !Boolean.getBoolean(DISABLE);\n+        }\n+    };\n+\n+    public static void setDetector(final Callable<Boolean> detector) {\n+        if (detector == null) throw new IllegalArgumentException();\n+        Ansi.detector = detector;\n+    }\n+\n+    public static boolean isDetected() {\n+        try {\n+            return detector.call();\n+        } catch (Exception e) {\n+            return true;\n+        }\n+    }\n+\n+    private static final InheritableThreadLocal<Boolean> holder = new InheritableThreadLocal<Boolean>() {\n+        @Override\n+        protected Boolean initialValue() {\n+            return isDetected();\n+        }\n+    };\n+\n+    public static void setEnabled(final boolean flag) {\n+        holder.set(flag);\n+    }\n+\n+    public static boolean isEnabled() {\n+        return holder.get();\n+    }\n+\n+    public static Ansi ansi() {\n+        if (isEnabled()) {\n+            return new Ansi();\n+        } else {\n+            return new NoAnsi();\n+        }\n+    }\n+\n+    public static Ansi ansi(StringBuilder builder) {\n+        if (isEnabled()) {\n+            return new Ansi(builder);\n+        } else {\n+            return new NoAnsi(builder);\n+        }\n+    }\n+\n+    public static Ansi ansi(int size) {\n+        if (isEnabled()) {\n+            return new Ansi(size);\n+        } else {\n+            return new NoAnsi(size);\n+        }\n+    }\n+\n+    private static class NoAnsi\n+            extends Ansi {\n+        public NoAnsi() {\n+            super();\n+        }\n+\n+        public NoAnsi(int size) {\n+            super(size);\n+        }\n+\n+        public NoAnsi(StringBuilder builder) {\n+            super(builder);\n+        }\n+\n+        @Override\n+        public Ansi fg(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bg(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi fgBright(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bgBright(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi fg(int color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi fgRgb(int r, int g, int b) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bg(int color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bgRgb(int r, int g, int b) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi a(Attribute attribute) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursor(int row, int column) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorToColumn(int x) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorUp(int y) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorRight(int x) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorDown(int y) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorLeft(int x) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorDownLine() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorDownLine(final int n) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorUpLine() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorUpLine(final int n) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseScreen() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseScreen(Erase kind) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseLine() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseLine(Erase kind) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi scrollUp(int rows) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi scrollDown(int rows) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi saveCursorPosition() {\n+            return this;\n+        }\n+\n+        @Override\n+        @Deprecated\n+        public Ansi restorCursorPosition() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi restoreCursorPosition() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi reset() {\n+            return this;\n+        }\n+    }\n+\n+    private final StringBuilder builder;\n+    private final ArrayList<Integer> attributeOptions = new ArrayList<Integer>(5);\n+\n+    public Ansi() {\n+        this(new StringBuilder(80));\n+    }\n+\n+    public Ansi(Ansi parent) {\n+        this(new StringBuilder(parent.builder));\n+        attributeOptions.addAll(parent.attributeOptions);\n+    }\n+\n+    public Ansi(int size) {\n+        this(new StringBuilder(size));\n+    }\n+\n+    public Ansi(StringBuilder builder) {\n+        this.builder = builder;\n+    }\n+\n+    public Ansi fg(Color color) {\n+        attributeOptions.add(color.fg());\n+        return this;\n+    }\n+\n+    public Ansi fg(int color) {\n+        attributeOptions.add(38);\n+        attributeOptions.add(5);\n+        attributeOptions.add(color & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi fgRgb(int color) {\n+        return fgRgb(color >> 16, color >> 8, color);\n+    }\n+\n+    public Ansi fgRgb(int r, int g, int b) {\n+        attributeOptions.add(38);\n+        attributeOptions.add(2);\n+        attributeOptions.add(r & 0xff);\n+        attributeOptions.add(g & 0xff);\n+        attributeOptions.add(b & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi fgBlack() {\n+        return this.fg(Color.BLACK);\n+    }\n+\n+    public Ansi fgBlue() {\n+        return this.fg(Color.BLUE);\n+    }\n+\n+    public Ansi fgCyan() {\n+        return this.fg(Color.CYAN);\n+    }\n+\n+    public Ansi fgDefault() {\n+        return this.fg(Color.DEFAULT);\n+    }\n+\n+    public Ansi fgGreen() {\n+        return this.fg(Color.GREEN);\n+    }\n+\n+    public Ansi fgMagenta() {\n+        return this.fg(Color.MAGENTA);\n+    }\n+\n+    public Ansi fgRed() {\n+        return this.fg(Color.RED);\n+    }\n+\n+    public Ansi fgYellow() {\n+        return this.fg(Color.YELLOW);\n+    }\n+\n+    public Ansi bg(Color color) {\n+        attributeOptions.add(color.bg());\n+        return this;\n+    }\n+\n+    public Ansi bg(int color) {\n+        attributeOptions.add(48);\n+        attributeOptions.add(5);\n+        attributeOptions.add(color & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi bgRgb(int color) {\n+        return bgRgb(color >> 16, color >> 8, color);\n+    }\n+\n+    public Ansi bgRgb(int r, int g, int b) {\n+        attributeOptions.add(48);\n+        attributeOptions.add(2);\n+        attributeOptions.add(r & 0xff);\n+        attributeOptions.add(g & 0xff);\n+        attributeOptions.add(b & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi bgCyan() {\n+        return this.bg(Color.CYAN);\n+    }\n+\n+    public Ansi bgDefault() {\n+        return this.bg(Color.DEFAULT);\n+    }\n+\n+    public Ansi bgGreen() {\n+        return this.bg(Color.GREEN);\n+    }\n+\n+    public Ansi bgMagenta() {\n+        return this.bg(Color.MAGENTA);\n+    }\n+\n+    public Ansi bgRed() {\n+        return this.bg(Color.RED);\n+    }\n+\n+    public Ansi bgYellow() {\n+        return this.bg(Color.YELLOW);\n+    }\n+\n+    public Ansi fgBright(Color color) {\n+        attributeOptions.add(color.fgBright());\n+        return this;\n+    }\n+\n+    public Ansi fgBrightBlack() {\n+        return this.fgBright(Color.BLACK);\n+    }\n+\n+    public Ansi fgBrightBlue() {\n+        return this.fgBright(Color.BLUE);\n+    }\n+\n+    public Ansi fgBrightCyan() {\n+        return this.fgBright(Color.CYAN);\n+    }\n+\n+    public Ansi fgBrightDefault() {\n+        return this.fgBright(Color.DEFAULT);\n+    }\n+\n+    public Ansi fgBrightGreen() {\n+        return this.fgBright(Color.GREEN);\n+    }\n+\n+    public Ansi fgBrightMagenta() {\n+        return this.fgBright(Color.MAGENTA);\n+    }\n+\n+    public Ansi fgBrightRed() {\n+        return this.fgBright(Color.RED);\n+    }\n+\n+    public Ansi fgBrightYellow() {\n+        return this.fgBright(Color.YELLOW);\n+    }\n+\n+    public Ansi bgBright(Color color) {\n+        attributeOptions.add(color.bgBright());\n+        return this;\n+    }\n+\n+    public Ansi bgBrightCyan() {\n+        return this.bgBright(Color.CYAN);\n+    }\n+\n+    public Ansi bgBrightDefault() {\n+        return this.bgBright(Color.DEFAULT);\n+    }\n+\n+    public Ansi bgBrightGreen() {\n+        return this.bgBright(Color.GREEN);\n+    }\n+\n+    public Ansi bgBrightMagenta() {\n+        return this.bgBright(Color.MAGENTA);\n+    }\n+\n+    public Ansi bgBrightRed() {\n+        return this.bgBright(Color.RED);\n+    }\n+\n+    public Ansi bgBrightYellow() {\n+        return this.bgBright(Color.YELLOW);\n+    }\n+\n+    public Ansi a(Attribute attribute) {\n+        attributeOptions.add(attribute.value());\n+        return this;\n+    }\n+\n+    /**\n+     * Moves the cursor to row n, column m. The values are 1-based.\n+     * Any values less than 1 are mapped to 1.\n+     *\n+     * @param row    row (1-based) from top\n+     * @param column column (1 based) from left\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursor(final int row, final int column) {\n+        return appendEscapeSequence('H', Math.max(1, row), Math.max(1, column));\n+    }\n+\n+    /**\n+     * Moves the cursor to column n. The parameter n is 1-based.\n+     * If n is less than 1 it is moved to the first column.\n+     *\n+     * @param x the index (1-based) of the column to move to\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorToColumn(final int x) {\n+        return appendEscapeSequence('G', Math.max(1, x));\n+    }\n+\n+    /**\n+     * Moves the cursor up. If the parameter y is negative it moves the cursor down.\n+     *\n+     * @param y the number of lines to move up\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorUp(final int y) {\n+        return y > 0 ? appendEscapeSequence('A', y) : y < 0 ? cursorDown(-y) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor down. If the parameter y is negative it moves the cursor up.\n+     *\n+     * @param y the number of lines to move down\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorDown(final int y) {\n+        return y > 0 ? appendEscapeSequence('B', y) : y < 0 ? cursorUp(-y) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor right. If the parameter x is negative it moves the cursor left.\n+     *\n+     * @param x the number of characters to move right\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorRight(final int x) {\n+        return x > 0 ? appendEscapeSequence('C', x) : x < 0 ? cursorLeft(-x) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor left. If the parameter x is negative it moves the cursor right.\n+     *\n+     * @param x the number of characters to move left\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorLeft(final int x) {\n+        return x > 0 ? appendEscapeSequence('D', x) : x < 0 ? cursorRight(-x) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor relative to the current position. The cursor is moved right if x is\n+     * positive, left if negative and down if y is positive and up if negative.\n+     *\n+     * @param x the number of characters to move horizontally\n+     * @param y the number of lines to move vertically\n+     * @return this Ansi instance\n+     * @since 2.2\n+     */\n+    public Ansi cursorMove(final int x, final int y) {\n+        return cursorRight(x).cursorDown(y);\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the line below.\n+     *\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorDownLine() {\n+        return appendEscapeSequence('E');\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the n-th line below. If the parameter n is negative it\n+     * moves the cursor to the beginning of the n-th line above.\n+     *\n+     * @param n the number of lines to move the cursor\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorDownLine(final int n) {\n+        return n < 0 ? cursorUpLine(-n) : appendEscapeSequence('E', n);\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the line above.\n+     *\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorUpLine() {\n+        return appendEscapeSequence('F');\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the n-th line above. If the parameter n is negative it\n+     * moves the cursor to the beginning of the n-th line below.\n+     *\n+     * @param n the number of lines to move the cursor\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorUpLine(final int n) {\n+        return n < 0 ? cursorDownLine(-n) : appendEscapeSequence('F', n);\n+    }\n+\n+    public Ansi eraseScreen() {\n+        return appendEscapeSequence('J', Erase.ALL.value());\n+    }\n+\n+    public Ansi eraseScreen(final Erase kind) {\n+        return appendEscapeSequence('J', kind.value());\n+    }\n+\n+    public Ansi eraseLine() {\n+        return appendEscapeSequence('K');\n+    }\n+\n+    public Ansi eraseLine(final Erase kind) {\n+        return appendEscapeSequence('K', kind.value());\n+    }\n+\n+    public Ansi scrollUp(final int rows) {\n+        return rows > 0 ? appendEscapeSequence('S', rows) : rows < 0 ? scrollDown(-rows) : this;\n+    }\n+\n+    public Ansi scrollDown(final int rows) {\n+        return rows > 0 ? appendEscapeSequence('T', rows) : rows < 0 ? scrollUp(-rows) : this;\n+    }\n+\n+    public Ansi saveCursorPosition() {\n+        return appendEscapeSequence('s');\n+    }\n+\n+    @Deprecated\n+    public Ansi restorCursorPosition() {\n+        return appendEscapeSequence('u');\n+    }\n+\n+    public Ansi restoreCursorPosition() {\n+        return appendEscapeSequence('u');\n+    }\n+\n+    public Ansi reset() {\n+        return a(Attribute.RESET);\n+    }\n+\n+    public Ansi bold() {\n+        return a(Attribute.INTENSITY_BOLD);\n+    }\n+\n+    public Ansi boldOff() {\n+        return a(Attribute.INTENSITY_BOLD_OFF);\n+    }\n+\n+    public Ansi a(String value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(boolean value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(char value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(char[] value, int offset, int len) {\n+        flushAttributes();\n+        builder.append(value, offset, len);\n+        return this;\n+    }\n+\n+    public Ansi a(char[] value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(CharSequence value, int start, int end) {\n+        flushAttributes();\n+        builder.append(value, start, end);\n+        return this;\n+    }\n+\n+    public Ansi a(CharSequence value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(double value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(float value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(int value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(long value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(Object value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(StringBuffer value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi newline() {\n+        flushAttributes();\n+        builder.append(System.getProperty(\"line.separator\"));\n+        return this;\n+    }\n+\n+    public Ansi format(String pattern, Object... args) {\n+        flushAttributes();\n+        builder.append(String.format(pattern, args));\n+        return this;\n+    }\n+\n+    /**\n+     * Applies another function to this Ansi instance.\n+     *\n+     * @param fun the function to apply\n+     * @return this Ansi instance\n+     * @since 2.2\n+     */\n+    public Ansi apply(Consumer fun) {\n+        fun.apply(this);\n+        return this;\n+    }\n+\n+    /**\n+     * Uses the {@link AnsiRenderer}\n+     * to generate the ANSI escape sequences for the supplied text.\n+     *\n+     * @param text text\n+     * @return this\n+     * @since 2.2\n+     */\n+    public Ansi render(final String text) {\n+        a(AnsiRenderer.render(text));\n+        return this;\n+    }\n+\n+    /**\n+     * String formats and renders the supplied arguments.  Uses the {@link AnsiRenderer}\n+     * to generate the ANSI escape sequences.\n+     *\n+     * @param text format\n+     * @param args arguments\n+     * @return this\n+     * @since 2.2\n+     */\n+    public Ansi render(final String text, Object... args) {\n+        a(String.format(AnsiRenderer.render(text), args));\n+        return this;\n+    }\n+\n+    @Override\n+    public String toString() {\n+        flushAttributes();\n+        return builder.toString();\n+    }\n+\n+    ///////////////////////////////////////////////////////////////////\n+    // Private Helper Methods\n+    ///////////////////////////////////////////////////////////////////\n+\n+    private Ansi appendEscapeSequence(char command) {\n+        flushAttributes();\n+        builder.append(FIRST_ESC_CHAR);\n+        builder.append(SECOND_ESC_CHAR);\n+        builder.append(command);\n+        return this;\n+    }\n+\n+    private Ansi appendEscapeSequence(char command, int option) {\n+        flushAttributes();\n+        builder.append(FIRST_ESC_CHAR);\n+        builder.append(SECOND_ESC_CHAR);\n+        builder.append(option);\n+        builder.append(command);\n+        return this;\n+    }\n+\n+    private Ansi appendEscapeSequence(char command, Object... options) {\n+        flushAttributes();\n+        return _appendEscapeSequence(command, options);\n+    }\n+\n+    private void flushAttributes() {\n+        if (attributeOptions.isEmpty())\n+            return;\n+        if (attributeOptions.size() == 1 && attributeOptions.get(0) == 0) {\n+            builder.append(FIRST_ESC_CHAR);\n+            builder.append(SECOND_ESC_CHAR);\n+            builder.append('m');\n+        } else {\n+            _appendEscapeSequence('m', attributeOptions.toArray());\n+        }\n+        attributeOptions.clear();\n+    }\n+\n+    private Ansi _appendEscapeSequence(char command, Object... options) {\n+        builder.append(FIRST_ESC_CHAR);\n+        builder.append(SECOND_ESC_CHAR);\n+        int size = options.length;\n+        for (int i = 0; i < size; i++) {\n+            if (i != 0) {\n+                builder.append(';');\n+            }\n+            if (options[i] != null) {\n+                builder.append(options[i]);\n+            }\n+        }\n+        builder.append(command);\n+        return this;\n+    }\n+\n+    @Override\n+    public Ansi append(CharSequence csq) {\n+        builder.append(csq);\n+        return this;\n+    }\n+\n+    @Override\n+    public Ansi append(CharSequence csq, int start, int end) {\n+        builder.append(csq, start, end);\n+        return this;\n+    }\n+\n+    @Override\n+    public Ansi append(char c) {\n+        builder.append(c);\n+        return this;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiColors.java", "source2": "org/fusesource/jansi/AnsiColors.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,38 +1,38 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-/**\r\n- * Colors support.\r\n- *\r\n- * @since 2.1\r\n- */\r\n-public enum AnsiColors {\r\n-\r\n-    Colors16(\"16 colors\"),\r\n-    Colors256(\"256 colors\"),\r\n-    TrueColor(\"24-bit colors\");\r\n-\r\n-    private final String description;\r\n-\r\n-    AnsiColors(String description) {\r\n-        this.description = description;\r\n-    }\r\n-\r\n-    String getDescription() {\r\n-        return description;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+/**\n+ * Colors support.\n+ *\n+ * @since 2.1\n+ */\n+public enum AnsiColors {\n+\n+    Colors16(\"16 colors\"),\n+    Colors256(\"256 colors\"),\n+    TrueColor(\"24-bit colors\");\n+\n+    private final String description;\n+\n+    AnsiColors(String description) {\n+        this.description = description;\n+    }\n+\n+    String getDescription() {\n+        return description;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiConsole.java", "source2": "org/fusesource/jansi/AnsiConsole.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,560 +1,560 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.FileDescriptor;\r\n-import java.io.FileOutputStream;\r\n-import java.io.IOError;\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.io.PrintStream;\r\n-import java.io.UnsupportedEncodingException;\r\n-import java.nio.charset.Charset;\r\n-import java.nio.charset.UnsupportedCharsetException;\r\n-import java.util.Locale;\r\n-\r\n-import org.fusesource.jansi.internal.CLibrary;\r\n-import org.fusesource.jansi.internal.CLibrary.WinSize;\r\n-import org.fusesource.jansi.io.AnsiOutputStream;\r\n-import org.fusesource.jansi.io.AnsiProcessor;\r\n-import org.fusesource.jansi.io.FastBufferedOutputStream;\r\n-import org.fusesource.jansi.io.WindowsAnsiProcessor;\r\n-import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\r\n-\r\n-import static org.fusesource.jansi.internal.CLibrary.ioctl;\r\n-import static org.fusesource.jansi.internal.CLibrary.isatty;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetConsoleMode;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleMode;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\r\n-\r\n-/**\r\n- * Provides consistent access to an ANSI aware console PrintStream or an ANSI codes stripping PrintStream\r\n- * if not on a terminal (see \r\n- * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/CLibrary.html\">Jansi native\r\n- * CLibrary isatty(int)</a>).\r\n- * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\r\n- * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @since 1.0\r\n- * @see #systemInstall()\r\n- * @see #out()\r\n- * @see #err()\r\n- * @see #ansiStream(boolean) for more details on ANSI mode selection\r\n- */\r\n-public class AnsiConsole {\r\n-\r\n-    /**\r\n-     * The default mode which Jansi will use, can be either <code>force</code>, <code>strip</code>\r\n-     * or <code>default</code> (the default).\r\n-     * If this property is set, it will override <code>jansi.passthrough</code>,\r\n-     * <code>jansi.strip</code> and <code>jansi.force</code> properties.\r\n-     */\r\n-    public static final String JANSI_MODE = \"jansi.mode\";\r\n-    /**\r\n-     * Jansi mode specific to the standard output stream.\r\n-     */\r\n-    public static final String JANSI_OUT_MODE = \"jansi.out.mode\";\r\n-    /**\r\n-     * Jansi mode specific to the standard error stream.\r\n-     */\r\n-    public static final String JANSI_ERR_MODE = \"jansi.err.mode\";\r\n-\r\n-    /**\r\n-     * Jansi mode value to strip all ansi sequences.\r\n-     */\r\n-    public static final String JANSI_MODE_STRIP = \"strip\";\r\n-    /**\r\n-     * Jansi mode value to force ansi sequences to the stream even if it's not a terminal.\r\n-     */\r\n-    public static final String JANSI_MODE_FORCE = \"force\";\r\n-    /**\r\n-     * Jansi mode value that output sequences if on a terminal, else strip them.\r\n-     */\r\n-    public static final String JANSI_MODE_DEFAULT = \"default\";\r\n-\r\n-    /**\r\n-     * The default color support that Jansi will use, can be either <code>16</code>,\r\n-     * <code>256</code> or <code>truecolor</code>.  If not set, JANSI will try to\r\n-     * autodetect the number of colors supported by the terminal by checking the\r\n-     * <code>COLORTERM</code> and <code>TERM</code> variables.\r\n-     */\r\n-    public static final String JANSI_COLORS = \"jansi.colors\";\r\n-    /**\r\n-     * Jansi colors specific to the standard output stream.\r\n-     */\r\n-    public static final String JANSI_OUT_COLORS = \"jansi.out.colors\";\r\n-    /**\r\n-     * Jansi colors specific to the standard error stream.\r\n-     */\r\n-    public static final String JANSI_ERR_COLORS = \"jansi.err.colors\";\r\n-\r\n-    /**\r\n-     * Force the use of 16 colors. When using a 256-indexed color, or an RGB\r\n-     * color, the color will be rounded to the nearest one from the 16 palette.\r\n-     */\r\n-    public static final String JANSI_COLORS_16 = \"16\";\r\n-    /**\r\n-     * Force the use of 256 colors. When using an RGB color, the color will be\r\n-     * rounded to the nearest one from the standard 256 palette.\r\n-     */\r\n-    public static final String JANSI_COLORS_256 = \"256\";\r\n-    /**\r\n-     * Force the use of 24-bit colors.\r\n-     */\r\n-    public static final String JANSI_COLORS_TRUECOLOR = \"truecolor\";\r\n-\r\n-    /**\r\n-     * If the <code>jansi.passthrough</code> system property is set to true, will not perform any transformation\r\n-     * and any ansi sequence will be conveyed without any modification.\r\n-     *\r\n-     * @deprecated use {@link #JANSI_MODE} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static final String JANSI_PASSTHROUGH = \"jansi.passthrough\";\r\n-    /**\r\n-     * If the <code>jansi.strip</code> system property is set to true, and <code>jansi.passthrough</code>\r\n-     * is not enabled, all ansi sequences will be stripped before characters are written to the output streams.\r\n-     *\r\n-     * @deprecated use {@link #JANSI_MODE} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static final String JANSI_STRIP = \"jansi.strip\";\r\n-    /**\r\n-     * If the <code>jansi.force</code> system property is set to true, and neither <code>jansi.passthrough</code>\r\n-     * nor <code>jansi.strip</code> are set, then ansi sequences will be printed to the output stream.\r\n-     * This forces the behavior which is by default dependent on the output stream being a real console: if the\r\n-     * output stream is redirected to a file or through a system pipe, ansi sequences are disabled by default.\r\n-     *\r\n-     * @deprecated use {@link #JANSI_MODE} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static final String JANSI_FORCE = \"jansi.force\";\r\n-    /**\r\n-     * If the <code>jansi.eager</code> system property is set to true, the system streams will be eagerly\r\n-     * initialized, else the initialization is delayed until {@link #out()}, {@link #err()} or {@link #systemInstall()}\r\n-     * is called.\r\n-     *\r\n-     * @deprecated this property has been added but only for backward compatibility.\r\n-     * @since 2.1\r\n-     */\r\n-    @Deprecated()\r\n-    public static final String JANSI_EAGER = \"jansi.eager\";\r\n-    /**\r\n-     * If the <code>jansi.noreset</code> system property is set to true, the attributes won't be\r\n-     * reset when the streams are uninstalled.\r\n-     */\r\n-    public static final String JANSI_NORESET = \"jansi.noreset\";\r\n-\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #sysOut()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream system_out = System.out;\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #out()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream out;\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #sysErr()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream system_err = System.err;\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #err()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream err;\r\n-\r\n-    /**\r\n-     * Try to find the width of the console for this process.\r\n-     * Both output and error streams will be checked to determine the width.\r\n-     * A value of 0 is returned if the width can not be determined.\r\n-     * @since 2.2\r\n-     */\r\n-    public static int getTerminalWidth() {\r\n-        int w = out().getTerminalWidth();\r\n-        if (w <= 0) {\r\n-            w = err().getTerminalWidth();\r\n-        }\r\n-        return w;\r\n-    }\r\n-\r\n-    static final boolean IS_WINDOWS = System.getProperty(\"os.name\").toLowerCase(Locale.ENGLISH).contains(\"win\");\r\n-\r\n-    static final boolean IS_CYGWIN = IS_WINDOWS\r\n-            && System.getenv(\"PWD\") != null\r\n-            && System.getenv(\"PWD\").startsWith(\"/\");\r\n-\r\n-    static final boolean IS_MSYSTEM = IS_WINDOWS\r\n-            && System.getenv(\"MSYSTEM\") != null\r\n-            && (System.getenv(\"MSYSTEM\").startsWith(\"MINGW\")\r\n-                || System.getenv(\"MSYSTEM\").equals(\"MSYS\"));\r\n-\r\n-    static final boolean IS_CONEMU = IS_WINDOWS\r\n-            && System.getenv(\"ConEmuPID\") != null;\r\n-\r\n-    static final int ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;\r\n-\r\n-    static int STDOUT_FILENO = 1;\r\n-\r\n-    static int STDERR_FILENO = 2;\r\n-\r\n-\r\n-    static {\r\n-        if (getBoolean(JANSI_EAGER)) {\r\n-            initStreams();\r\n-        }\r\n-    }\r\n-\r\n-    private static boolean initialized;\r\n-    private static int installed;\r\n-    private static int virtualProcessing;\r\n-\r\n-    private AnsiConsole() {\r\n-    }\r\n-\r\n-    private static AnsiPrintStream ansiStream(boolean stdout) {\r\n-        FileDescriptor descriptor = stdout ? FileDescriptor.out : FileDescriptor.err;\r\n-        final OutputStream out = new FastBufferedOutputStream(new FileOutputStream(descriptor));\r\n-\r\n-        String enc = System.getProperty(stdout ? \"sun.stdout.encoding\" : \"sun.stderr.encoding\");\r\n-\r\n-        final boolean isatty;\r\n-        boolean isAtty;\r\n-        boolean withException;\r\n-        // Do not use the CLibrary.STDOUT_FILENO to avoid errors in case\r\n-        // the library can not be loaded on unsupported platforms\r\n-        final int fd = stdout ? STDOUT_FILENO : STDERR_FILENO;\r\n-        try {\r\n-            // If we can detect that stdout is not a tty.. then setup\r\n-            // to strip the ANSI sequences..\r\n-            isAtty = isatty(fd) != 0;\r\n-            String term = System.getenv(\"TERM\");\r\n-            String emacs = System.getenv(\"INSIDE_EMACS\");\r\n-            if (isAtty && \"dumb\".equals(term) && emacs != null && !emacs.contains(\"comint\")) {\r\n-                isAtty = false;\r\n-            }\r\n-            withException = false;\r\n-        } catch (Throwable ignore) {\r\n-            // These errors happen if the JNI lib is not available for your platform.\r\n-            // But since we are on ANSI friendly platform, assume the user is on the console.\r\n-            isAtty = false;\r\n-            withException = true;\r\n-        }\r\n-        isatty = isAtty;\r\n-\r\n-        final AnsiOutputStream.WidthSupplier width;\r\n-        final AnsiProcessor processor;\r\n-        final AnsiType type;\r\n-        final AnsiOutputStream.IoRunnable installer;\r\n-        final AnsiOutputStream.IoRunnable uninstaller;\r\n-        if (!isatty) {\r\n-            processor = null;\r\n-            type = withException ? AnsiType.Unsupported : AnsiType.Redirected;\r\n-            installer = uninstaller = null;\r\n-            width = new AnsiOutputStream.ZeroWidthSupplier();\r\n-        }\r\n-        else if (IS_WINDOWS) {\r\n-            final long console = GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);\r\n-            final int[] mode = new int[1];\r\n-            final boolean isConsole = GetConsoleMode(console, mode) != 0;\r\n-            if (isConsole\r\n-                    && SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING) != 0) {\r\n-                SetConsoleMode(console, mode[0]); // set it back for now, but we know it works\r\n-                processor = null;\r\n-                type = AnsiType.VirtualTerminal;\r\n-                installer = new AnsiOutputStream.IoRunnable() {\r\n-                    @Override\r\n-                    public void run() throws IOException {\r\n-                        virtualProcessing++;\r\n-                        SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING);\r\n-                    }\r\n-                };\r\n-                uninstaller = new AnsiOutputStream.IoRunnable() {\r\n-                    @Override\r\n-                    public void run() throws IOException {\r\n-                        if (--virtualProcessing == 0) {\r\n-                            SetConsoleMode(console, mode[0]);\r\n-                        }\r\n-                    }\r\n-                };\r\n-            }\r\n-            else if ((IS_CONEMU || IS_CYGWIN || IS_MSYSTEM) && !isConsole) {\r\n-                // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\r\n-                processor = null;\r\n-                type = AnsiType.Native;\r\n-                installer = uninstaller = null;\r\n-            }\r\n-            else {\r\n-                // On Windows, when no ANSI-capable terminal is used, we know the console does not natively interpret ANSI\r\n-                // codes but we can use jansi Kernel32 API for console\r\n-                AnsiProcessor proc;\r\n-                AnsiType ttype;\r\n-                try {\r\n-                    proc = new WindowsAnsiProcessor(out, console);\r\n-                    ttype = AnsiType.Emulation;\r\n-                } catch (Throwable ignore) {\r\n-                    // this happens when the stdout is being redirected to a file.\r\n-                    // Use the AnsiProcessor to strip out the ANSI escape sequences.\r\n-                    proc = new AnsiProcessor(out);\r\n-                    ttype = AnsiType.Unsupported;\r\n-                }\r\n-                processor = proc;\r\n-                type = ttype;\r\n-                installer = uninstaller = null;\r\n-            }\r\n-            width = new AnsiOutputStream.WidthSupplier() {\r\n-                @Override\r\n-                public int getTerminalWidth() {\r\n-                    CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\r\n-                    GetConsoleScreenBufferInfo(console, info);\r\n-                    return info.windowWidth();\r\n-                }\r\n-            };\r\n-        }\r\n-\r\n-        // We must be on some Unix variant...\r\n-        else {\r\n-            // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\r\n-            processor = null;\r\n-            type = AnsiType.Native;\r\n-            installer = uninstaller = null;\r\n-            width = new AnsiOutputStream.WidthSupplier() {\r\n-                @Override\r\n-                public int getTerminalWidth() {\r\n-                    WinSize sz = new WinSize();\r\n-                    ioctl(fd, CLibrary.TIOCGWINSZ, sz);\r\n-                    return sz.ws_col;\r\n-                }\r\n-            };\r\n-        }\r\n-\r\n-        AnsiMode mode;\r\n-\r\n-        // If the jansi.mode property is set, use it\r\n-        String jansiMode = System.getProperty(stdout ? JANSI_OUT_MODE : JANSI_ERR_MODE, System.getProperty(JANSI_MODE));\r\n-        if (JANSI_MODE_FORCE.equals(jansiMode)) {\r\n-            mode = AnsiMode.Force;\r\n-        } else if (JANSI_MODE_STRIP.equals(jansiMode)) {\r\n-            mode = AnsiMode.Strip;\r\n-        } else if (jansiMode != null) {\r\n-            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\r\n-        }\r\n-\r\n-        // If the jansi.passthrough property is set, then don't interpret\r\n-        // any of the ansi sequences.\r\n-        else if (getBoolean(JANSI_PASSTHROUGH)) {\r\n-            mode = AnsiMode.Force;\r\n-        }\r\n-\r\n-        // If the jansi.strip property is set, then we just strip the\r\n-        // the ansi escapes.\r\n-        else if (getBoolean(JANSI_STRIP)) {\r\n-            mode = AnsiMode.Strip;\r\n-        }\r\n-\r\n-        // If the jansi.force property is set, then we force to output\r\n-        // the ansi escapes for piping it into ansi color aware commands (e.g. less -r)\r\n-        else if (getBoolean(JANSI_FORCE)) {\r\n-            mode = AnsiMode.Force;\r\n-        }\r\n-\r\n-        else {\r\n-            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\r\n-        }\r\n-\r\n-        AnsiColors colors;\r\n-\r\n-        String colorterm, term;\r\n-        // If the jansi.colors property is set, use it\r\n-        String jansiColors = System.getProperty(stdout ? JANSI_OUT_COLORS : JANSI_ERR_COLORS, System.getProperty(JANSI_COLORS));\r\n-        if (JANSI_COLORS_TRUECOLOR.equals(jansiColors)) {\r\n-            colors = AnsiColors.TrueColor;\r\n-        } else if (JANSI_COLORS_256.equals(jansiColors)) {\r\n-            colors = AnsiColors.Colors256;\r\n-        } else if (jansiColors != null) {\r\n-            colors = AnsiColors.Colors16;\r\n-        }\r\n-\r\n-        // If the COLORTERM env variable contains \"truecolor\" or \"24bit\", assume true color support\r\n-        // see https://gist.github.com/XVilka/8346728#true-color-detection\r\n-        else if ((colorterm = System.getenv(\"COLORTERM\")) != null\r\n-                && (colorterm.contains(\"truecolor\") || colorterm.contains(\"24bit\"))) {\r\n-            colors = AnsiColors.TrueColor;\r\n-        }\r\n-\r\n-        // check the if TERM contains -direct\r\n-        else if ((term = System.getenv(\"TERM\")) != null && term.contains(\"-direct\")) {\r\n-            colors = AnsiColors.TrueColor;\r\n-        }\r\n-\r\n-        // check the if TERM contains -256color\r\n-        else if (term != null && term.contains(\"-256color\")) {\r\n-            colors = AnsiColors.Colors256;\r\n-        }\r\n-\r\n-        // else defaults to 16 colors\r\n-        else {\r\n-            colors = AnsiColors.Colors16;\r\n-        }\r\n-\r\n-        // If the jansi.noreset property is not set, reset the attributes\r\n-        // when the stream is closed\r\n-        boolean resetAtUninstall = type != AnsiType.Unsupported && !getBoolean(JANSI_NORESET);\r\n-\r\n-        Charset cs = Charset.defaultCharset();\r\n-        if (enc != null) {\r\n-            try {\r\n-                cs = Charset.forName(enc);\r\n-            } catch (UnsupportedCharsetException e) {\r\n-            }\r\n-        }\r\n-        return newPrintStream(new AnsiOutputStream(out, width, mode, processor, type, colors, cs,\r\n-                installer, uninstaller, resetAtUninstall), cs.name());\r\n-    }\r\n-\r\n-    private static AnsiPrintStream newPrintStream(AnsiOutputStream out, String enc) {\r\n-        if (enc != null) {\r\n-            try {\r\n-                return new AnsiPrintStream(out, true, enc);\r\n-            } catch (UnsupportedEncodingException e) {\r\n-            }\r\n-        }\r\n-        return new AnsiPrintStream(out, true);\r\n-    }\r\n-\r\n-    static boolean getBoolean(String name) {\r\n-        boolean result = false;\r\n-        try {\r\n-            String val = System.getProperty(name);\r\n-            result = val.isEmpty() || Boolean.parseBoolean(val);\r\n-        } catch (IllegalArgumentException e) {\r\n-        } catch (NullPointerException e) {\r\n-        }\r\n-        return result;\r\n-    }\r\n-\r\n-    /**\r\n-     * If the standard out natively supports ANSI escape codes, then this just\r\n-     * returns System.out, otherwise it will provide an ANSI aware PrintStream\r\n-     * which strips out the ANSI escape sequences or which implement the escape\r\n-     * sequences.\r\n-     *\r\n-     * @return a PrintStream which is ANSI aware.\r\n-     */\r\n-    public static AnsiPrintStream out() {\r\n-        initStreams();\r\n-        return (AnsiPrintStream) out;\r\n-    }\r\n-\r\n-    /**\r\n-     * Access to the original System.out stream before ansi streams were installed.\r\n-     *\r\n-     * @return the originial System.out print stream\r\n-     */\r\n-    public static PrintStream sysOut() {\r\n-        return system_out;\r\n-    }\r\n-\r\n-    /**\r\n-     * If the standard out natively supports ANSI escape codes, then this just\r\n-     * returns System.err, otherwise it will provide an ANSI aware PrintStream\r\n-     * which strips out the ANSI escape sequences or which implement the escape\r\n-     * sequences.\r\n-     *\r\n-     * @return a PrintStream which is ANSI aware.\r\n-     */\r\n-    public static AnsiPrintStream err() {\r\n-        initStreams();\r\n-        return (AnsiPrintStream) err;\r\n-    }\r\n-\r\n-    /**\r\n-     * Access to the original System.err stream before ansi streams were installed.\r\n-     *\r\n-     * @return the originial System.err print stream\r\n-     */\r\n-    public static PrintStream sysErr() {\r\n-        return system_err;\r\n-    }\r\n-\r\n-    /**\r\n-     * Install <code>AnsiConsole.out()</code> to <code>System.out</code> and\r\n-     * <code>AnsiConsole.err()</code> to <code>System.err</code>.\r\n-     * @see #systemUninstall()\r\n-     */\r\n-    synchronized static public void systemInstall() {\r\n-        installed++;\r\n-        if (installed == 1) {\r\n-            initStreams();\r\n-            try {\r\n-                ((AnsiPrintStream) out).install();\r\n-                ((AnsiPrintStream) err).install();\r\n-            } catch (IOException e) {\r\n-                throw new IOError(e);\r\n-            }\r\n-            System.setOut(out);\r\n-            System.setErr(err);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * check if the streams have been installed or not\r\n-     */\r\n-    synchronized public static boolean isInstalled() {\r\n-        return installed > 0;\r\n-    }\r\n-\r\n-    /**\r\n-     * undo a previous {@link #systemInstall()}.  If {@link #systemInstall()} was called\r\n-     * multiple times, {@link #systemUninstall()} must be called the same number of times before\r\n-     * it is actually uninstalled.\r\n-     */\r\n-    synchronized public static void systemUninstall() {\r\n-        installed--;\r\n-        if (installed == 0) {\r\n-            try {\r\n-                ((AnsiPrintStream) out).uninstall();\r\n-                ((AnsiPrintStream) err).uninstall();\r\n-            } catch (IOException e) {\r\n-                throw new IOError(e);\r\n-            }\r\n-            initialized = false;\r\n-            System.setOut(system_out);\r\n-            System.setErr(system_err);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Initialize the out/err ansi-enabled streams\r\n-     */\r\n-    synchronized static void initStreams()\r\n-    {\r\n-        if ( !initialized )\r\n-        {\r\n-            out = ansiStream(true);\r\n-            err = ansiStream(false);\r\n-            initialized = true;\r\n-        }\r\n-    }\r\n-\r\n-    ;\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.FileDescriptor;\n+import java.io.FileOutputStream;\n+import java.io.IOError;\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.io.PrintStream;\n+import java.io.UnsupportedEncodingException;\n+import java.nio.charset.Charset;\n+import java.nio.charset.UnsupportedCharsetException;\n+import java.util.Locale;\n+\n+import org.fusesource.jansi.internal.CLibrary;\n+import org.fusesource.jansi.internal.CLibrary.WinSize;\n+import org.fusesource.jansi.io.AnsiOutputStream;\n+import org.fusesource.jansi.io.AnsiProcessor;\n+import org.fusesource.jansi.io.FastBufferedOutputStream;\n+import org.fusesource.jansi.io.WindowsAnsiProcessor;\n+import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\n+\n+import static org.fusesource.jansi.internal.CLibrary.ioctl;\n+import static org.fusesource.jansi.internal.CLibrary.isatty;\n+import static org.fusesource.jansi.internal.Kernel32.GetConsoleMode;\n+import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\n+import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleMode;\n+import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\n+\n+/**\n+ * Provides consistent access to an ANSI aware console PrintStream or an ANSI codes stripping PrintStream\n+ * if not on a terminal (see \n+ * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/CLibrary.html\">Jansi native\n+ * CLibrary isatty(int)</a>).\n+ * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\n+ * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @since 1.0\n+ * @see #systemInstall()\n+ * @see #out()\n+ * @see #err()\n+ * @see #ansiStream(boolean) for more details on ANSI mode selection\n+ */\n+public class AnsiConsole {\n+\n+    /**\n+     * The default mode which Jansi will use, can be either <code>force</code>, <code>strip</code>\n+     * or <code>default</code> (the default).\n+     * If this property is set, it will override <code>jansi.passthrough</code>,\n+     * <code>jansi.strip</code> and <code>jansi.force</code> properties.\n+     */\n+    public static final String JANSI_MODE = \"jansi.mode\";\n+    /**\n+     * Jansi mode specific to the standard output stream.\n+     */\n+    public static final String JANSI_OUT_MODE = \"jansi.out.mode\";\n+    /**\n+     * Jansi mode specific to the standard error stream.\n+     */\n+    public static final String JANSI_ERR_MODE = \"jansi.err.mode\";\n+\n+    /**\n+     * Jansi mode value to strip all ansi sequences.\n+     */\n+    public static final String JANSI_MODE_STRIP = \"strip\";\n+    /**\n+     * Jansi mode value to force ansi sequences to the stream even if it's not a terminal.\n+     */\n+    public static final String JANSI_MODE_FORCE = \"force\";\n+    /**\n+     * Jansi mode value that output sequences if on a terminal, else strip them.\n+     */\n+    public static final String JANSI_MODE_DEFAULT = \"default\";\n+\n+    /**\n+     * The default color support that Jansi will use, can be either <code>16</code>,\n+     * <code>256</code> or <code>truecolor</code>.  If not set, JANSI will try to\n+     * autodetect the number of colors supported by the terminal by checking the\n+     * <code>COLORTERM</code> and <code>TERM</code> variables.\n+     */\n+    public static final String JANSI_COLORS = \"jansi.colors\";\n+    /**\n+     * Jansi colors specific to the standard output stream.\n+     */\n+    public static final String JANSI_OUT_COLORS = \"jansi.out.colors\";\n+    /**\n+     * Jansi colors specific to the standard error stream.\n+     */\n+    public static final String JANSI_ERR_COLORS = \"jansi.err.colors\";\n+\n+    /**\n+     * Force the use of 16 colors. When using a 256-indexed color, or an RGB\n+     * color, the color will be rounded to the nearest one from the 16 palette.\n+     */\n+    public static final String JANSI_COLORS_16 = \"16\";\n+    /**\n+     * Force the use of 256 colors. When using an RGB color, the color will be\n+     * rounded to the nearest one from the standard 256 palette.\n+     */\n+    public static final String JANSI_COLORS_256 = \"256\";\n+    /**\n+     * Force the use of 24-bit colors.\n+     */\n+    public static final String JANSI_COLORS_TRUECOLOR = \"truecolor\";\n+\n+    /**\n+     * If the <code>jansi.passthrough</code> system property is set to true, will not perform any transformation\n+     * and any ansi sequence will be conveyed without any modification.\n+     *\n+     * @deprecated use {@link #JANSI_MODE} instead\n+     */\n+    @Deprecated\n+    public static final String JANSI_PASSTHROUGH = \"jansi.passthrough\";\n+    /**\n+     * If the <code>jansi.strip</code> system property is set to true, and <code>jansi.passthrough</code>\n+     * is not enabled, all ansi sequences will be stripped before characters are written to the output streams.\n+     *\n+     * @deprecated use {@link #JANSI_MODE} instead\n+     */\n+    @Deprecated\n+    public static final String JANSI_STRIP = \"jansi.strip\";\n+    /**\n+     * If the <code>jansi.force</code> system property is set to true, and neither <code>jansi.passthrough</code>\n+     * nor <code>jansi.strip</code> are set, then ansi sequences will be printed to the output stream.\n+     * This forces the behavior which is by default dependent on the output stream being a real console: if the\n+     * output stream is redirected to a file or through a system pipe, ansi sequences are disabled by default.\n+     *\n+     * @deprecated use {@link #JANSI_MODE} instead\n+     */\n+    @Deprecated\n+    public static final String JANSI_FORCE = \"jansi.force\";\n+    /**\n+     * If the <code>jansi.eager</code> system property is set to true, the system streams will be eagerly\n+     * initialized, else the initialization is delayed until {@link #out()}, {@link #err()} or {@link #systemInstall()}\n+     * is called.\n+     *\n+     * @deprecated this property has been added but only for backward compatibility.\n+     * @since 2.1\n+     */\n+    @Deprecated()\n+    public static final String JANSI_EAGER = \"jansi.eager\";\n+    /**\n+     * If the <code>jansi.noreset</code> system property is set to true, the attributes won't be\n+     * reset when the streams are uninstalled.\n+     */\n+    public static final String JANSI_NORESET = \"jansi.noreset\";\n+\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #sysOut()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream system_out = System.out;\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #out()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream out;\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #sysErr()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream system_err = System.err;\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #err()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream err;\n+\n+    /**\n+     * Try to find the width of the console for this process.\n+     * Both output and error streams will be checked to determine the width.\n+     * A value of 0 is returned if the width can not be determined.\n+     * @since 2.2\n+     */\n+    public static int getTerminalWidth() {\n+        int w = out().getTerminalWidth();\n+        if (w <= 0) {\n+            w = err().getTerminalWidth();\n+        }\n+        return w;\n+    }\n+\n+    static final boolean IS_WINDOWS = System.getProperty(\"os.name\").toLowerCase(Locale.ENGLISH).contains(\"win\");\n+\n+    static final boolean IS_CYGWIN = IS_WINDOWS\n+            && System.getenv(\"PWD\") != null\n+            && System.getenv(\"PWD\").startsWith(\"/\");\n+\n+    static final boolean IS_MSYSTEM = IS_WINDOWS\n+            && System.getenv(\"MSYSTEM\") != null\n+            && (System.getenv(\"MSYSTEM\").startsWith(\"MINGW\")\n+                || System.getenv(\"MSYSTEM\").equals(\"MSYS\"));\n+\n+    static final boolean IS_CONEMU = IS_WINDOWS\n+            && System.getenv(\"ConEmuPID\") != null;\n+\n+    static final int ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;\n+\n+    static int STDOUT_FILENO = 1;\n+\n+    static int STDERR_FILENO = 2;\n+\n+\n+    static {\n+        if (getBoolean(JANSI_EAGER)) {\n+            initStreams();\n+        }\n+    }\n+\n+    private static boolean initialized;\n+    private static int installed;\n+    private static int virtualProcessing;\n+\n+    private AnsiConsole() {\n+    }\n+\n+    private static AnsiPrintStream ansiStream(boolean stdout) {\n+        FileDescriptor descriptor = stdout ? FileDescriptor.out : FileDescriptor.err;\n+        final OutputStream out = new FastBufferedOutputStream(new FileOutputStream(descriptor));\n+\n+        String enc = System.getProperty(stdout ? \"sun.stdout.encoding\" : \"sun.stderr.encoding\");\n+\n+        final boolean isatty;\n+        boolean isAtty;\n+        boolean withException;\n+        // Do not use the CLibrary.STDOUT_FILENO to avoid errors in case\n+        // the library can not be loaded on unsupported platforms\n+        final int fd = stdout ? STDOUT_FILENO : STDERR_FILENO;\n+        try {\n+            // If we can detect that stdout is not a tty.. then setup\n+            // to strip the ANSI sequences..\n+            isAtty = isatty(fd) != 0;\n+            String term = System.getenv(\"TERM\");\n+            String emacs = System.getenv(\"INSIDE_EMACS\");\n+            if (isAtty && \"dumb\".equals(term) && emacs != null && !emacs.contains(\"comint\")) {\n+                isAtty = false;\n+            }\n+            withException = false;\n+        } catch (Throwable ignore) {\n+            // These errors happen if the JNI lib is not available for your platform.\n+            // But since we are on ANSI friendly platform, assume the user is on the console.\n+            isAtty = false;\n+            withException = true;\n+        }\n+        isatty = isAtty;\n+\n+        final AnsiOutputStream.WidthSupplier width;\n+        final AnsiProcessor processor;\n+        final AnsiType type;\n+        final AnsiOutputStream.IoRunnable installer;\n+        final AnsiOutputStream.IoRunnable uninstaller;\n+        if (!isatty) {\n+            processor = null;\n+            type = withException ? AnsiType.Unsupported : AnsiType.Redirected;\n+            installer = uninstaller = null;\n+            width = new AnsiOutputStream.ZeroWidthSupplier();\n+        }\n+        else if (IS_WINDOWS) {\n+            final long console = GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);\n+            final int[] mode = new int[1];\n+            final boolean isConsole = GetConsoleMode(console, mode) != 0;\n+            if (isConsole\n+                    && SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING) != 0) {\n+                SetConsoleMode(console, mode[0]); // set it back for now, but we know it works\n+                processor = null;\n+                type = AnsiType.VirtualTerminal;\n+                installer = new AnsiOutputStream.IoRunnable() {\n+                    @Override\n+                    public void run() throws IOException {\n+                        virtualProcessing++;\n+                        SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING);\n+                    }\n+                };\n+                uninstaller = new AnsiOutputStream.IoRunnable() {\n+                    @Override\n+                    public void run() throws IOException {\n+                        if (--virtualProcessing == 0) {\n+                            SetConsoleMode(console, mode[0]);\n+                        }\n+                    }\n+                };\n+            }\n+            else if ((IS_CONEMU || IS_CYGWIN || IS_MSYSTEM) && !isConsole) {\n+                // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\n+                processor = null;\n+                type = AnsiType.Native;\n+                installer = uninstaller = null;\n+            }\n+            else {\n+                // On Windows, when no ANSI-capable terminal is used, we know the console does not natively interpret ANSI\n+                // codes but we can use jansi Kernel32 API for console\n+                AnsiProcessor proc;\n+                AnsiType ttype;\n+                try {\n+                    proc = new WindowsAnsiProcessor(out, console);\n+                    ttype = AnsiType.Emulation;\n+                } catch (Throwable ignore) {\n+                    // this happens when the stdout is being redirected to a file.\n+                    // Use the AnsiProcessor to strip out the ANSI escape sequences.\n+                    proc = new AnsiProcessor(out);\n+                    ttype = AnsiType.Unsupported;\n+                }\n+                processor = proc;\n+                type = ttype;\n+                installer = uninstaller = null;\n+            }\n+            width = new AnsiOutputStream.WidthSupplier() {\n+                @Override\n+                public int getTerminalWidth() {\n+                    CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\n+                    GetConsoleScreenBufferInfo(console, info);\n+                    return info.windowWidth();\n+                }\n+            };\n+        }\n+\n+        // We must be on some Unix variant...\n+        else {\n+            // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\n+            processor = null;\n+            type = AnsiType.Native;\n+            installer = uninstaller = null;\n+            width = new AnsiOutputStream.WidthSupplier() {\n+                @Override\n+                public int getTerminalWidth() {\n+                    WinSize sz = new WinSize();\n+                    ioctl(fd, CLibrary.TIOCGWINSZ, sz);\n+                    return sz.ws_col;\n+                }\n+            };\n+        }\n+\n+        AnsiMode mode;\n+\n+        // If the jansi.mode property is set, use it\n+        String jansiMode = System.getProperty(stdout ? JANSI_OUT_MODE : JANSI_ERR_MODE, System.getProperty(JANSI_MODE));\n+        if (JANSI_MODE_FORCE.equals(jansiMode)) {\n+            mode = AnsiMode.Force;\n+        } else if (JANSI_MODE_STRIP.equals(jansiMode)) {\n+            mode = AnsiMode.Strip;\n+        } else if (jansiMode != null) {\n+            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\n+        }\n+\n+        // If the jansi.passthrough property is set, then don't interpret\n+        // any of the ansi sequences.\n+        else if (getBoolean(JANSI_PASSTHROUGH)) {\n+            mode = AnsiMode.Force;\n+        }\n+\n+        // If the jansi.strip property is set, then we just strip the\n+        // the ansi escapes.\n+        else if (getBoolean(JANSI_STRIP)) {\n+            mode = AnsiMode.Strip;\n+        }\n+\n+        // If the jansi.force property is set, then we force to output\n+        // the ansi escapes for piping it into ansi color aware commands (e.g. less -r)\n+        else if (getBoolean(JANSI_FORCE)) {\n+            mode = AnsiMode.Force;\n+        }\n+\n+        else {\n+            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\n+        }\n+\n+        AnsiColors colors;\n+\n+        String colorterm, term;\n+        // If the jansi.colors property is set, use it\n+        String jansiColors = System.getProperty(stdout ? JANSI_OUT_COLORS : JANSI_ERR_COLORS, System.getProperty(JANSI_COLORS));\n+        if (JANSI_COLORS_TRUECOLOR.equals(jansiColors)) {\n+            colors = AnsiColors.TrueColor;\n+        } else if (JANSI_COLORS_256.equals(jansiColors)) {\n+            colors = AnsiColors.Colors256;\n+        } else if (jansiColors != null) {\n+            colors = AnsiColors.Colors16;\n+        }\n+\n+        // If the COLORTERM env variable contains \"truecolor\" or \"24bit\", assume true color support\n+        // see https://gist.github.com/XVilka/8346728#true-color-detection\n+        else if ((colorterm = System.getenv(\"COLORTERM\")) != null\n+                && (colorterm.contains(\"truecolor\") || colorterm.contains(\"24bit\"))) {\n+            colors = AnsiColors.TrueColor;\n+        }\n+\n+        // check the if TERM contains -direct\n+        else if ((term = System.getenv(\"TERM\")) != null && term.contains(\"-direct\")) {\n+            colors = AnsiColors.TrueColor;\n+        }\n+\n+        // check the if TERM contains -256color\n+        else if (term != null && term.contains(\"-256color\")) {\n+            colors = AnsiColors.Colors256;\n+        }\n+\n+        // else defaults to 16 colors\n+        else {\n+            colors = AnsiColors.Colors16;\n+        }\n+\n+        // If the jansi.noreset property is not set, reset the attributes\n+        // when the stream is closed\n+        boolean resetAtUninstall = type != AnsiType.Unsupported && !getBoolean(JANSI_NORESET);\n+\n+        Charset cs = Charset.defaultCharset();\n+        if (enc != null) {\n+            try {\n+                cs = Charset.forName(enc);\n+            } catch (UnsupportedCharsetException e) {\n+            }\n+        }\n+        return newPrintStream(new AnsiOutputStream(out, width, mode, processor, type, colors, cs,\n+                installer, uninstaller, resetAtUninstall), cs.name());\n+    }\n+\n+    private static AnsiPrintStream newPrintStream(AnsiOutputStream out, String enc) {\n+        if (enc != null) {\n+            try {\n+                return new AnsiPrintStream(out, true, enc);\n+            } catch (UnsupportedEncodingException e) {\n+            }\n+        }\n+        return new AnsiPrintStream(out, true);\n+    }\n+\n+    static boolean getBoolean(String name) {\n+        boolean result = false;\n+        try {\n+            String val = System.getProperty(name);\n+            result = val.isEmpty() || Boolean.parseBoolean(val);\n+        } catch (IllegalArgumentException e) {\n+        } catch (NullPointerException e) {\n+        }\n+        return result;\n+    }\n+\n+    /**\n+     * If the standard out natively supports ANSI escape codes, then this just\n+     * returns System.out, otherwise it will provide an ANSI aware PrintStream\n+     * which strips out the ANSI escape sequences or which implement the escape\n+     * sequences.\n+     *\n+     * @return a PrintStream which is ANSI aware.\n+     */\n+    public static AnsiPrintStream out() {\n+        initStreams();\n+        return (AnsiPrintStream) out;\n+    }\n+\n+    /**\n+     * Access to the original System.out stream before ansi streams were installed.\n+     *\n+     * @return the originial System.out print stream\n+     */\n+    public static PrintStream sysOut() {\n+        return system_out;\n+    }\n+\n+    /**\n+     * If the standard out natively supports ANSI escape codes, then this just\n+     * returns System.err, otherwise it will provide an ANSI aware PrintStream\n+     * which strips out the ANSI escape sequences or which implement the escape\n+     * sequences.\n+     *\n+     * @return a PrintStream which is ANSI aware.\n+     */\n+    public static AnsiPrintStream err() {\n+        initStreams();\n+        return (AnsiPrintStream) err;\n+    }\n+\n+    /**\n+     * Access to the original System.err stream before ansi streams were installed.\n+     *\n+     * @return the originial System.err print stream\n+     */\n+    public static PrintStream sysErr() {\n+        return system_err;\n+    }\n+\n+    /**\n+     * Install <code>AnsiConsole.out()</code> to <code>System.out</code> and\n+     * <code>AnsiConsole.err()</code> to <code>System.err</code>.\n+     * @see #systemUninstall()\n+     */\n+    synchronized static public void systemInstall() {\n+        installed++;\n+        if (installed == 1) {\n+            initStreams();\n+            try {\n+                ((AnsiPrintStream) out).install();\n+                ((AnsiPrintStream) err).install();\n+            } catch (IOException e) {\n+                throw new IOError(e);\n+            }\n+            System.setOut(out);\n+            System.setErr(err);\n+        }\n+    }\n+\n+    /**\n+     * check if the streams have been installed or not\n+     */\n+    synchronized public static boolean isInstalled() {\n+        return installed > 0;\n+    }\n+\n+    /**\n+     * undo a previous {@link #systemInstall()}.  If {@link #systemInstall()} was called\n+     * multiple times, {@link #systemUninstall()} must be called the same number of times before\n+     * it is actually uninstalled.\n+     */\n+    synchronized public static void systemUninstall() {\n+        installed--;\n+        if (installed == 0) {\n+            try {\n+                ((AnsiPrintStream) out).uninstall();\n+                ((AnsiPrintStream) err).uninstall();\n+            } catch (IOException e) {\n+                throw new IOError(e);\n+            }\n+            initialized = false;\n+            System.setOut(system_out);\n+            System.setErr(system_err);\n+        }\n+    }\n+\n+    /**\n+     * Initialize the out/err ansi-enabled streams\n+     */\n+    synchronized static void initStreams()\n+    {\n+        if ( !initialized )\n+        {\n+            out = ansiStream(true);\n+            err = ansiStream(false);\n+            initialized = true;\n+        }\n+    }\n+\n+    ;\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiMain.java", "source2": "org/fusesource/jansi/AnsiMain.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,289 +1,289 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import static org.fusesource.jansi.Ansi.ansi;\r\n-\r\n-import java.io.BufferedReader;\r\n-import java.io.Closeable;\r\n-import java.io.File;\r\n-import java.io.FileInputStream;\r\n-import java.io.IOException;\r\n-import java.io.InputStream;\r\n-import java.io.InputStreamReader;\r\n-import java.io.PrintStream;\r\n-import java.util.Properties;\r\n-\r\n-import org.fusesource.jansi.Ansi.Attribute;\r\n-import org.fusesource.jansi.internal.CLibrary;\r\n-import org.fusesource.jansi.internal.JansiLoader;\r\n-\r\n-/**\r\n- * Main class for the library, providing executable jar to diagnose Jansi setup.\r\n- * <p>If no system property is set and output is sent to a terminal (no redirect to a file):\r\n- * <ul>\r\n- * <li>any terminal on any Unix should get <code>RESET_ANSI_AT_CLOSE</code> mode,</li>\r\n- * <li>on Windows, Git-bash or Cygwin terminals should get <code>RESET_ANSI_AT_CLOSE</code> mode also, since they\r\n- * support natively ANSI escape sequences like any Unix terminal,</li>\r\n- * <li>on Windows, cmd.exe, PowerShell or Git-cmd terminals should get <code>WINDOWS</code> mode.</li>\r\n- * </ul>\r\n- * If stdout is redirected to a file (<code>&gt; out.txt</code>), System.out should switch to <code>STRIP_ANSI</code>.\r\n- * Same for stderr redirection (<code>2&gt; err.txt</code>) which should affect System.err mode.\r\n- * <p>The results will vary if you play with <code>jansi.passthrough</code>, <code>jansi.strip</code> or\r\n- * <code>jansi.force</code> system property, or if you redirect output to a file.\r\n- * <p>If you have a specific situation that is not covered, please report precise conditions to reproduce\r\n- * the issue and ideas on how to detect precisely the affected situation.\r\n- * @see AnsiConsole\r\n- */\r\n-public class AnsiMain {\r\n-    public static void main(String... args) throws IOException {\r\n-        System.out.println(\"Jansi \" + getJansiVersion());\r\n-\r\n-        System.out.println();\r\n-\r\n-        // info on native library\r\n-        System.out.println(\"library.jansi.path= \" + System.getProperty(\"library.jansi.path\", \"\"));\r\n-        System.out.println(\"library.jansi.version= \" + System.getProperty(\"library.jansi.version\", \"\"));\r\n-        JansiLoader.initialize();\r\n-        System.out.println(\"Jansi native library loaded from \" + JansiLoader.getNativeLibraryPath());\r\n-        if (JansiLoader.getNativeLibrarySourceUrl() != null) {\r\n-            System.out.println(\"   which was auto-extracted from \" + JansiLoader.getNativeLibrarySourceUrl());\r\n-        }\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(\"os.name= \" + System.getProperty(\"os.name\") + \", \"\r\n-                        + \"os.version= \" + System.getProperty(\"os.version\") + \", \"\r\n-                        + \"os.arch= \" + System.getProperty(\"os.arch\"));\r\n-        System.out.println(\"file.encoding= \" + System.getProperty(\"file.encoding\"));\r\n-        System.out.println(\"java.version= \" + System.getProperty(\"java.version\") + \", \"\r\n-                        + \"java.vendor= \" + System.getProperty(\"java.vendor\") + \",\"\r\n-                        + \" java.home= \" + System.getProperty(\"java.home\"));\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(AnsiConsole.JANSI_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_MODE, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_OUT_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_MODE, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_ERR_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_MODE, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_COLORS, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_OUT_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_COLORS, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_ERR_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_COLORS, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_PASSTHROUGH + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_PASSTHROUGH));\r\n-        System.out.println(AnsiConsole.JANSI_STRIP + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_STRIP));\r\n-        System.out.println(AnsiConsole.JANSI_FORCE + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_FORCE));\r\n-        System.out.println(AnsiConsole.JANSI_NORESET + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_NORESET));\r\n-        System.out.println(Ansi.DISABLE + \"= \" + AnsiConsole.getBoolean(Ansi.DISABLE));\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(\"IS_WINDOWS: \" + AnsiConsole.IS_WINDOWS);\r\n-        if (AnsiConsole.IS_WINDOWS) {\r\n-            System.out.println(\"IS_CONEMU: \" + AnsiConsole.IS_CONEMU);\r\n-            System.out.println(\"IS_CYGWIN: \" + AnsiConsole.IS_CYGWIN);\r\n-            System.out.println(\"IS_MSYSTEM: \" + AnsiConsole.IS_MSYSTEM);\r\n-        }\r\n-\r\n-        System.out.println();\r\n-\r\n-        diagnoseTty(false); // System.out\r\n-        diagnoseTty(true);  // System.err\r\n-\r\n-        AnsiConsole.systemInstall();\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(\"Resulting Jansi modes for stout/stderr streams:\");\r\n-        System.out.println(\"  - System.out: \" + AnsiConsole.out().toString());\r\n-        System.out.println(\"  - System.err: \" + AnsiConsole.err().toString());\r\n-        System.out.println(\"Processor types description:\");\r\n-        for (AnsiType type : AnsiType.values()) {\r\n-            System.out.println(\"  - \" + type + \": \" + type.getDescription());\r\n-        }\r\n-        System.out.println(\"Colors support description:\");\r\n-        for (AnsiColors colors : AnsiColors.values()) {\r\n-            System.out.println(\"  - \" + colors + \": \" + colors.getDescription());\r\n-        }\r\n-        System.out.println(\"Modes description:\");\r\n-        for (AnsiMode mode : AnsiMode.values()) {\r\n-            System.out.println(\"  - \" + mode + \": \" + mode.getDescription());\r\n-        }\r\n-\r\n-        try {\r\n-            System.out.println();\r\n-\r\n-            testAnsi(false);\r\n-            testAnsi(true);\r\n-\r\n-            if (args.length == 0) {\r\n-                printJansiLogoDemo();\r\n-                return;\r\n-            }\r\n-\r\n-            System.out.println();\r\n-\r\n-            if (args.length == 1) {\r\n-                File f = new File(args[0]);\r\n-                if (f.exists())\r\n-                {\r\n-                    // write file content\r\n-                    System.out.println(ansi().bold().a(\"\\\"\" + args[0] + \"\\\" content:\").reset());\r\n-                    writeFileContent(f);\r\n-                    return;\r\n-                }\r\n-            }\r\n-\r\n-            // write args without Jansi then with Jansi AnsiConsole\r\n-            System.out.println(ansi().bold().a(\"original args:\").reset());\r\n-            int i = 1;\r\n-            for (String arg: args) {\r\n-                AnsiConsole.system_out.print(i++ + \": \");\r\n-                AnsiConsole.system_out.println(arg);\r\n-            }\r\n-\r\n-            System.out.println(ansi().bold().a(\"Jansi filtered args:\").reset());\r\n-            i = 1;\r\n-            for (String arg: args) {\r\n-                System.out.print(i++ + \": \");\r\n-                System.out.println(arg);\r\n-            }\r\n-        } finally {\r\n-            AnsiConsole.systemUninstall();\r\n-        }\r\n-    }\r\n-\r\n-    private static String getJansiVersion() {\r\n-        Package p = AnsiMain.class.getPackage();\r\n-        return ( p == null ) ? null : p.getImplementationVersion();\r\n-    }\r\n-\r\n-    private static void diagnoseTty(boolean stderr) {\r\n-        int fd = stderr ? CLibrary.STDERR_FILENO : CLibrary.STDOUT_FILENO;\r\n-        int isatty = CLibrary.isatty(fd);\r\n-\r\n-        System.out.println(\"isatty(STD\" + (stderr ? \"ERR\" : \"OUT\") + \"_FILENO): \" + isatty + \", System.\"\r\n-            + (stderr ? \"err\" : \"out\") + \" \" + ((isatty == 0) ? \"is *NOT*\" : \"is\") + \" a terminal\");\r\n-    }\r\n-\r\n-    private static void testAnsi(boolean stderr) {\r\n-        @SuppressWarnings( \"resource\" )\r\n-        PrintStream s = stderr ? System.err : System.out;\r\n-        s.print(\"test on System.\" + (stderr ? \"err\" : \"out\") + \":\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"            bright:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().fgBright(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"              bold:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().bold().fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"             faint:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"        bold+faint:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().bold().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        Ansi ansi = ansi();\r\n-        ansi.a(\"        256 colors: \");\r\n-        for (int i = 0; i < 6*6*6; i++) {\r\n-            if (i > 0 && i % 36 == 0) {\r\n-                ansi.reset();\r\n-                ansi.newline();\r\n-                ansi.a(\"                    \");\r\n-            } else if (i > 0 && i % 6 == 0) {\r\n-                ansi.reset();\r\n-                ansi.a(\"  \");\r\n-            }\r\n-            int a0 = i % 6;\r\n-            int a1 = (i  / 6) % 6;\r\n-            int a2 = i / 36;\r\n-            ansi.bg(16 + a0 + a2 * 6 + a1 * 36).a(' ');\r\n-        }\r\n-        ansi.reset();\r\n-        s.println(ansi);\r\n-        ansi = ansi();\r\n-        ansi.a(\"         truecolor: \");\r\n-        for (int i = 0; i < 256; i++) {\r\n-            if (i > 0 && i % 48 == 0) {\r\n-                ansi.reset();\r\n-                ansi.newline();\r\n-                ansi.a(\"                    \");\r\n-            }\r\n-            int r = 255 - i;\r\n-            int g = i * 2 > 255 ? 255 - 2 * i : 2 * i;\r\n-            int b = i;\r\n-            ansi.bgRgb(r, g, b).fgRgb(255 - r, 255 - g, 255 - b).a(i % 2 == 0 ? '/' : '\\\\');\r\n-        }\r\n-        ansi.reset();\r\n-        s.println(ansi);\r\n-    }\r\n-\r\n-    private static String getPomPropertiesVersion(String path) throws IOException {\r\n-        InputStream in = AnsiMain.class.getResourceAsStream(\"/META-INF/maven/\" + path + \"/pom.properties\");\r\n-        if (in == null) {\r\n-            return null;\r\n-        }\r\n-        try {\r\n-            Properties p = new Properties();\r\n-            p.load(in);\r\n-            return p.getProperty(\"version\");\r\n-        } finally {\r\n-            closeQuietly(in);\r\n-        }\r\n-    }\r\n-\r\n-    private static void printJansiLogoDemo() throws IOException {\r\n-        BufferedReader in = new BufferedReader(new InputStreamReader(AnsiMain.class.getResourceAsStream(\"jansi.txt\"), \"UTF-8\"));\r\n-        try {\r\n-            String l;\r\n-            while ((l = in.readLine()) != null) {\r\n-                System.out.println(l);\r\n-            }\r\n-        } finally {\r\n-            closeQuietly(in);\r\n-        }\r\n-    }\r\n-\r\n-    private static void writeFileContent(File f) throws IOException {\r\n-        InputStream in = new FileInputStream(f);\r\n-        try {\r\n-            byte[] buf = new byte[1024];\r\n-            int l = 0;\r\n-            while ((l = in.read(buf)) >= 0) {\r\n-                System.out.write(buf, 0, l);\r\n-            }\r\n-        } finally {\r\n-            closeQuietly(in);\r\n-        }\r\n-    }\r\n-\r\n-    private static void closeQuietly(Closeable c) {\r\n-        try {\r\n-            c.close();\r\n-        } catch (IOException ioe) {\r\n-            ioe.printStackTrace(System.err);\r\n-        }\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import static org.fusesource.jansi.Ansi.ansi;\n+\n+import java.io.BufferedReader;\n+import java.io.Closeable;\n+import java.io.File;\n+import java.io.FileInputStream;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.InputStreamReader;\n+import java.io.PrintStream;\n+import java.util.Properties;\n+\n+import org.fusesource.jansi.Ansi.Attribute;\n+import org.fusesource.jansi.internal.CLibrary;\n+import org.fusesource.jansi.internal.JansiLoader;\n+\n+/**\n+ * Main class for the library, providing executable jar to diagnose Jansi setup.\n+ * <p>If no system property is set and output is sent to a terminal (no redirect to a file):\n+ * <ul>\n+ * <li>any terminal on any Unix should get <code>RESET_ANSI_AT_CLOSE</code> mode,</li>\n+ * <li>on Windows, Git-bash or Cygwin terminals should get <code>RESET_ANSI_AT_CLOSE</code> mode also, since they\n+ * support natively ANSI escape sequences like any Unix terminal,</li>\n+ * <li>on Windows, cmd.exe, PowerShell or Git-cmd terminals should get <code>WINDOWS</code> mode.</li>\n+ * </ul>\n+ * If stdout is redirected to a file (<code>&gt; out.txt</code>), System.out should switch to <code>STRIP_ANSI</code>.\n+ * Same for stderr redirection (<code>2&gt; err.txt</code>) which should affect System.err mode.\n+ * <p>The results will vary if you play with <code>jansi.passthrough</code>, <code>jansi.strip</code> or\n+ * <code>jansi.force</code> system property, or if you redirect output to a file.\n+ * <p>If you have a specific situation that is not covered, please report precise conditions to reproduce\n+ * the issue and ideas on how to detect precisely the affected situation.\n+ * @see AnsiConsole\n+ */\n+public class AnsiMain {\n+    public static void main(String... args) throws IOException {\n+        System.out.println(\"Jansi \" + getJansiVersion());\n+\n+        System.out.println();\n+\n+        // info on native library\n+        System.out.println(\"library.jansi.path= \" + System.getProperty(\"library.jansi.path\", \"\"));\n+        System.out.println(\"library.jansi.version= \" + System.getProperty(\"library.jansi.version\", \"\"));\n+        JansiLoader.initialize();\n+        System.out.println(\"Jansi native library loaded from \" + JansiLoader.getNativeLibraryPath());\n+        if (JansiLoader.getNativeLibrarySourceUrl() != null) {\n+            System.out.println(\"   which was auto-extracted from \" + JansiLoader.getNativeLibrarySourceUrl());\n+        }\n+\n+        System.out.println();\n+\n+        System.out.println(\"os.name= \" + System.getProperty(\"os.name\") + \", \"\n+                        + \"os.version= \" + System.getProperty(\"os.version\") + \", \"\n+                        + \"os.arch= \" + System.getProperty(\"os.arch\"));\n+        System.out.println(\"file.encoding= \" + System.getProperty(\"file.encoding\"));\n+        System.out.println(\"java.version= \" + System.getProperty(\"java.version\") + \", \"\n+                        + \"java.vendor= \" + System.getProperty(\"java.vendor\") + \",\"\n+                        + \" java.home= \" + System.getProperty(\"java.home\"));\n+\n+        System.out.println();\n+\n+        System.out.println(AnsiConsole.JANSI_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_MODE, \"\"));\n+        System.out.println(AnsiConsole.JANSI_OUT_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_MODE, \"\"));\n+        System.out.println(AnsiConsole.JANSI_ERR_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_MODE, \"\"));\n+        System.out.println(AnsiConsole.JANSI_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_COLORS, \"\"));\n+        System.out.println(AnsiConsole.JANSI_OUT_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_COLORS, \"\"));\n+        System.out.println(AnsiConsole.JANSI_ERR_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_COLORS, \"\"));\n+        System.out.println(AnsiConsole.JANSI_PASSTHROUGH + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_PASSTHROUGH));\n+        System.out.println(AnsiConsole.JANSI_STRIP + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_STRIP));\n+        System.out.println(AnsiConsole.JANSI_FORCE + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_FORCE));\n+        System.out.println(AnsiConsole.JANSI_NORESET + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_NORESET));\n+        System.out.println(Ansi.DISABLE + \"= \" + AnsiConsole.getBoolean(Ansi.DISABLE));\n+\n+        System.out.println();\n+\n+        System.out.println(\"IS_WINDOWS: \" + AnsiConsole.IS_WINDOWS);\n+        if (AnsiConsole.IS_WINDOWS) {\n+            System.out.println(\"IS_CONEMU: \" + AnsiConsole.IS_CONEMU);\n+            System.out.println(\"IS_CYGWIN: \" + AnsiConsole.IS_CYGWIN);\n+            System.out.println(\"IS_MSYSTEM: \" + AnsiConsole.IS_MSYSTEM);\n+        }\n+\n+        System.out.println();\n+\n+        diagnoseTty(false); // System.out\n+        diagnoseTty(true);  // System.err\n+\n+        AnsiConsole.systemInstall();\n+\n+        System.out.println();\n+\n+        System.out.println(\"Resulting Jansi modes for stout/stderr streams:\");\n+        System.out.println(\"  - System.out: \" + AnsiConsole.out().toString());\n+        System.out.println(\"  - System.err: \" + AnsiConsole.err().toString());\n+        System.out.println(\"Processor types description:\");\n+        for (AnsiType type : AnsiType.values()) {\n+            System.out.println(\"  - \" + type + \": \" + type.getDescription());\n+        }\n+        System.out.println(\"Colors support description:\");\n+        for (AnsiColors colors : AnsiColors.values()) {\n+            System.out.println(\"  - \" + colors + \": \" + colors.getDescription());\n+        }\n+        System.out.println(\"Modes description:\");\n+        for (AnsiMode mode : AnsiMode.values()) {\n+            System.out.println(\"  - \" + mode + \": \" + mode.getDescription());\n+        }\n+\n+        try {\n+            System.out.println();\n+\n+            testAnsi(false);\n+            testAnsi(true);\n+\n+            if (args.length == 0) {\n+                printJansiLogoDemo();\n+                return;\n+            }\n+\n+            System.out.println();\n+\n+            if (args.length == 1) {\n+                File f = new File(args[0]);\n+                if (f.exists())\n+                {\n+                    // write file content\n+                    System.out.println(ansi().bold().a(\"\\\"\" + args[0] + \"\\\" content:\").reset());\n+                    writeFileContent(f);\n+                    return;\n+                }\n+            }\n+\n+            // write args without Jansi then with Jansi AnsiConsole\n+            System.out.println(ansi().bold().a(\"original args:\").reset());\n+            int i = 1;\n+            for (String arg: args) {\n+                AnsiConsole.system_out.print(i++ + \": \");\n+                AnsiConsole.system_out.println(arg);\n+            }\n+\n+            System.out.println(ansi().bold().a(\"Jansi filtered args:\").reset());\n+            i = 1;\n+            for (String arg: args) {\n+                System.out.print(i++ + \": \");\n+                System.out.println(arg);\n+            }\n+        } finally {\n+            AnsiConsole.systemUninstall();\n+        }\n+    }\n+\n+    private static String getJansiVersion() {\n+        Package p = AnsiMain.class.getPackage();\n+        return ( p == null ) ? null : p.getImplementationVersion();\n+    }\n+\n+    private static void diagnoseTty(boolean stderr) {\n+        int fd = stderr ? CLibrary.STDERR_FILENO : CLibrary.STDOUT_FILENO;\n+        int isatty = CLibrary.isatty(fd);\n+\n+        System.out.println(\"isatty(STD\" + (stderr ? \"ERR\" : \"OUT\") + \"_FILENO): \" + isatty + \", System.\"\n+            + (stderr ? \"err\" : \"out\") + \" \" + ((isatty == 0) ? \"is *NOT*\" : \"is\") + \" a terminal\");\n+    }\n+\n+    private static void testAnsi(boolean stderr) {\n+        @SuppressWarnings( \"resource\" )\n+        PrintStream s = stderr ? System.err : System.out;\n+        s.print(\"test on System.\" + (stderr ? \"err\" : \"out\") + \":\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"            bright:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().fgBright(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"              bold:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().bold().fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"             faint:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"        bold+faint:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().bold().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        Ansi ansi = ansi();\n+        ansi.a(\"        256 colors: \");\n+        for (int i = 0; i < 6*6*6; i++) {\n+            if (i > 0 && i % 36 == 0) {\n+                ansi.reset();\n+                ansi.newline();\n+                ansi.a(\"                    \");\n+            } else if (i > 0 && i % 6 == 0) {\n+                ansi.reset();\n+                ansi.a(\"  \");\n+            }\n+            int a0 = i % 6;\n+            int a1 = (i  / 6) % 6;\n+            int a2 = i / 36;\n+            ansi.bg(16 + a0 + a2 * 6 + a1 * 36).a(' ');\n+        }\n+        ansi.reset();\n+        s.println(ansi);\n+        ansi = ansi();\n+        ansi.a(\"         truecolor: \");\n+        for (int i = 0; i < 256; i++) {\n+            if (i > 0 && i % 48 == 0) {\n+                ansi.reset();\n+                ansi.newline();\n+                ansi.a(\"                    \");\n+            }\n+            int r = 255 - i;\n+            int g = i * 2 > 255 ? 255 - 2 * i : 2 * i;\n+            int b = i;\n+            ansi.bgRgb(r, g, b).fgRgb(255 - r, 255 - g, 255 - b).a(i % 2 == 0 ? '/' : '\\\\');\n+        }\n+        ansi.reset();\n+        s.println(ansi);\n+    }\n+\n+    private static String getPomPropertiesVersion(String path) throws IOException {\n+        InputStream in = AnsiMain.class.getResourceAsStream(\"/META-INF/maven/\" + path + \"/pom.properties\");\n+        if (in == null) {\n+            return null;\n+        }\n+        try {\n+            Properties p = new Properties();\n+            p.load(in);\n+            return p.getProperty(\"version\");\n+        } finally {\n+            closeQuietly(in);\n+        }\n+    }\n+\n+    private static void printJansiLogoDemo() throws IOException {\n+        BufferedReader in = new BufferedReader(new InputStreamReader(AnsiMain.class.getResourceAsStream(\"jansi.txt\"), \"UTF-8\"));\n+        try {\n+            String l;\n+            while ((l = in.readLine()) != null) {\n+                System.out.println(l);\n+            }\n+        } finally {\n+            closeQuietly(in);\n+        }\n+    }\n+\n+    private static void writeFileContent(File f) throws IOException {\n+        InputStream in = new FileInputStream(f);\n+        try {\n+            byte[] buf = new byte[1024];\n+            int l = 0;\n+            while ((l = in.read(buf)) >= 0) {\n+                System.out.write(buf, 0, l);\n+            }\n+        } finally {\n+            closeQuietly(in);\n+        }\n+    }\n+\n+    private static void closeQuietly(Closeable c) {\n+        try {\n+            c.close();\n+        } catch (IOException ioe) {\n+            ioe.printStackTrace(System.err);\n+        }\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiMode.java", "source2": "org/fusesource/jansi/AnsiMode.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,38 +1,38 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-/**\r\n- * Ansi mode.\r\n- *\r\n- * @since 2.1\r\n- */\r\n-public enum AnsiMode {\r\n-\r\n-    Strip(\"Strip all ansi sequences\"),\r\n-    Default(\"Print ansi sequences if the stream is a terminal\"),\r\n-    Force(\"Always print ansi sequences, even if the stream is redirected\");\r\n-\r\n-    private final String description;\r\n-\r\n-    AnsiMode(String description) {\r\n-        this.description = description;\r\n-    }\r\n-\r\n-    String getDescription() {\r\n-        return description;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+/**\n+ * Ansi mode.\n+ *\n+ * @since 2.1\n+ */\n+public enum AnsiMode {\n+\n+    Strip(\"Strip all ansi sequences\"),\n+    Default(\"Print ansi sequences if the stream is a terminal\"),\n+    Force(\"Always print ansi sequences, even if the stream is redirected\");\n+\n+    private final String description;\n+\n+    AnsiMode(String description) {\n+        this.description = description;\n+    }\n+\n+    String getDescription() {\n+        return description;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiPrintStream.java", "source2": "org/fusesource/jansi/AnsiPrintStream.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,95 +1,95 @@\n-/*\r\n- * Copyright (C) 2009-2020 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.PrintStream;\r\n-import java.io.UnsupportedEncodingException;\r\n-\r\n-import org.fusesource.jansi.io.AnsiOutputStream;\r\n-\r\n-/**\r\n- * Simple PrintStream holding an AnsiOutputStream.\r\n- * This allows changing the mode in which the underlying AnsiOutputStream operates.\r\n- */\r\n-public class AnsiPrintStream extends PrintStream {\r\n-\r\n-    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush) {\r\n-        super(out, autoFlush);\r\n-    }\r\n-\r\n-    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException {\r\n-        super(out, autoFlush, encoding);\r\n-    }\r\n-\r\n-    protected AnsiOutputStream getOut() {\r\n-        return (AnsiOutputStream) out;\r\n-    }\r\n-\r\n-    public AnsiType getType() {\r\n-        return getOut().getType();\r\n-    }\r\n-\r\n-    public AnsiColors getColors() {\r\n-        return getOut().getColors();\r\n-    }\r\n-\r\n-    public AnsiMode getMode() {\r\n-        return getOut().getMode();\r\n-    }\r\n-\r\n-    public void setMode(AnsiMode ansiMode) {\r\n-        getOut().setMode(ansiMode);\r\n-    }\r\n-\r\n-    public boolean isResetAtUninstall() {\r\n-        return getOut().isResetAtUninstall();\r\n-    }\r\n-\r\n-    public void setResetAtUninstall(boolean resetAtClose) {\r\n-        getOut().setResetAtUninstall(resetAtClose);\r\n-    }\r\n-\r\n-    /**\r\n-     * Returns the width of the terminal associated with this stream or 0.\r\n-     * @since 2.2\r\n-     */\r\n-    public int getTerminalWidth() {\r\n-        return getOut().getTerminalWidth();\r\n-    }\r\n-\r\n-    public void install() throws IOException {\r\n-        getOut().install();\r\n-    }\r\n-\r\n-    public void uninstall() throws IOException {\r\n-        // If the system output stream has been closed, out should be null, so avoid a NPE\r\n-        AnsiOutputStream out = getOut();\r\n-        if (out != null) {\r\n-            out.uninstall();\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    public String toString() {\r\n-        return \"AnsiPrintStream{\"\r\n-                + \"type=\" + getType()\r\n-                + \", colors=\" + getColors()\r\n-                + \", mode=\" + getMode()\r\n-                + \", resetAtUninstall=\" + isResetAtUninstall()\r\n-                + \"}\";\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2020 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.IOException;\n+import java.io.PrintStream;\n+import java.io.UnsupportedEncodingException;\n+\n+import org.fusesource.jansi.io.AnsiOutputStream;\n+\n+/**\n+ * Simple PrintStream holding an AnsiOutputStream.\n+ * This allows changing the mode in which the underlying AnsiOutputStream operates.\n+ */\n+public class AnsiPrintStream extends PrintStream {\n+\n+    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush) {\n+        super(out, autoFlush);\n+    }\n+\n+    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException {\n+        super(out, autoFlush, encoding);\n+    }\n+\n+    protected AnsiOutputStream getOut() {\n+        return (AnsiOutputStream) out;\n+    }\n+\n+    public AnsiType getType() {\n+        return getOut().getType();\n+    }\n+\n+    public AnsiColors getColors() {\n+        return getOut().getColors();\n+    }\n+\n+    public AnsiMode getMode() {\n+        return getOut().getMode();\n+    }\n+\n+    public void setMode(AnsiMode ansiMode) {\n+        getOut().setMode(ansiMode);\n+    }\n+\n+    public boolean isResetAtUninstall() {\n+        return getOut().isResetAtUninstall();\n+    }\n+\n+    public void setResetAtUninstall(boolean resetAtClose) {\n+        getOut().setResetAtUninstall(resetAtClose);\n+    }\n+\n+    /**\n+     * Returns the width of the terminal associated with this stream or 0.\n+     * @since 2.2\n+     */\n+    public int getTerminalWidth() {\n+        return getOut().getTerminalWidth();\n+    }\n+\n+    public void install() throws IOException {\n+        getOut().install();\n+    }\n+\n+    public void uninstall() throws IOException {\n+        // If the system output stream has been closed, out should be null, so avoid a NPE\n+        AnsiOutputStream out = getOut();\n+        if (out != null) {\n+            out.uninstall();\n+        }\n+    }\n+\n+    @Override\n+    public String toString() {\n+        return \"AnsiPrintStream{\"\n+                + \"type=\" + getType()\n+                + \", colors=\" + getColors()\n+                + \", mode=\" + getMode()\n+                + \", resetAtUninstall=\" + isResetAtUninstall()\n+                + \"}\";\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiRenderer.java", "source2": "org/fusesource/jansi/AnsiRenderer.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,256 +1,256 @@\n-/*\r\n- * Copyright (C) 2009-2021 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.IOException;\r\n-import java.util.Locale;\r\n-\r\n-import org.fusesource.jansi.Ansi.Attribute;\r\n-import org.fusesource.jansi.Ansi.Color;\r\n-\r\n-/**\r\n- * Renders ANSI color escape-codes in strings by parsing out some special syntax to pick up the correct fluff to use.\r\n- *\r\n- * The syntax for embedded ANSI codes is:\r\n- *\r\n- * <pre>\r\n- *   &#64;|<em>code</em>(,<em>code</em>)* <em>text</em>|&#64;\r\n- * </pre>\r\n- *\r\n- * Examples:\r\n- *\r\n- * <pre>\r\n- *   &#64;|bold Hello|&#64;\r\n- * </pre>\r\n- *\r\n- * <pre>\r\n- *   &#64;|bold,red Warning!|&#64;\r\n- * </pre>\r\n- *\r\n- * @since 2.2\r\n- */\r\n-public class AnsiRenderer {\r\n-\r\n-    public static final String BEGIN_TOKEN = \"@|\";\r\n-\r\n-    public static final String END_TOKEN = \"|@\";\r\n-\r\n-    public static final String CODE_TEXT_SEPARATOR = \" \";\r\n-\r\n-    public static final String CODE_LIST_SEPARATOR = \",\";\r\n-\r\n-    private static final int BEGIN_TOKEN_LEN = 2;\r\n-\r\n-    private static final int END_TOKEN_LEN = 2;\r\n-\r\n-    public static String render(final String input) throws IllegalArgumentException {\r\n-        try {\r\n-            return render(input, new StringBuilder()).toString();\r\n-        } catch (IOException e) {\r\n-            // Cannot happen because StringBuilder does not throw IOException\r\n-            throw new IllegalArgumentException(e);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Renders the given input to the target Appendable.\r\n-     *\r\n-     * @param input\r\n-     *            source to render\r\n-     * @param target\r\n-     *            render onto this target Appendable.\r\n-     * @return the given Appendable\r\n-     * @throws IOException\r\n-     *             If an I/O error occurs\r\n-     */\r\n-    public static Appendable render(final String input, Appendable target) throws IOException {\r\n-\r\n-        int i = 0;\r\n-        int j, k;\r\n-\r\n-        while (true) {\r\n-            j = input.indexOf(BEGIN_TOKEN, i);\r\n-            if (j == -1) {\r\n-                if (i == 0) {\r\n-                    target.append(input);\r\n-                    return target;\r\n-                }\r\n-                target.append(input.substring(i));\r\n-                return target;\r\n-            }\r\n-            target.append(input.substring(i, j));\r\n-            k = input.indexOf(END_TOKEN, j);\r\n-\r\n-            if (k == -1) {\r\n-                target.append(input);\r\n-                return target;\r\n-            }\r\n-            j += BEGIN_TOKEN_LEN;\r\n-            String spec = input.substring(j, k);\r\n-\r\n-            String[] items = spec.split(CODE_TEXT_SEPARATOR, 2);\r\n-            if (items.length == 1) {\r\n-                target.append(input);\r\n-                return target;\r\n-            }\r\n-            String replacement = render(items[1], items[0].split(CODE_LIST_SEPARATOR));\r\n-\r\n-            target.append(replacement);\r\n-\r\n-            i = k + END_TOKEN_LEN;\r\n-        }\r\n-    }\r\n-\r\n-    public static String render(final String text, final String... codes) {\r\n-        return render(Ansi.ansi(), codes)\r\n-                .a(text).reset().toString();\r\n-    }\r\n-\r\n-    /**\r\n-     * Renders {@link Code} names as an ANSI escape string.\r\n-     * @param codes The code names to render\r\n-     * @return an ANSI escape string.\r\n-     */\r\n-    public static String renderCodes(final String... codes) {\r\n-        return render(Ansi.ansi(), codes).toString();\r\n-    }\r\n-\r\n-    /**\r\n-     * Renders {@link Code} names as an ANSI escape string.\r\n-     * @param codes A space separated list of code names to render\r\n-     * @return an ANSI escape string.\r\n-     */\r\n-    public static String renderCodes(final String codes) {\r\n-        return renderCodes(codes.split(\"\\\\s\"));\r\n-    }\r\n-\r\n-    private static Ansi render(Ansi ansi, String... names) {\r\n-        for (String name : names) {\r\n-            Code code = Code.valueOf(name.toUpperCase(Locale.ENGLISH));\r\n-            if (code.isColor()) {\r\n-                if (code.isBackground()) {\r\n-                    ansi.bg(code.getColor());\r\n-                } else {\r\n-                    ansi.fg(code.getColor());\r\n-                }\r\n-            } else if (code.isAttribute()) {\r\n-                ansi.a(code.getAttribute());\r\n-            }\r\n-        }\r\n-        return ansi;\r\n-    }\r\n-\r\n-    public static boolean test(final String text) {\r\n-        return text != null && text.contains(BEGIN_TOKEN);\r\n-    }\r\n-\r\n-    @SuppressWarnings(\"unused\")\r\n-    public enum Code {\r\n-        //\r\n-        // TODO: Find a better way to keep Code in sync with Color/Attribute/Erase\r\n-        //\r\n-\r\n-        // Colors\r\n-        BLACK(Color.BLACK),\r\n-        RED(Color.RED),\r\n-        GREEN(Color.GREEN),\r\n-        YELLOW(Color.YELLOW),\r\n-        BLUE(Color.BLUE),\r\n-        MAGENTA(Color.MAGENTA),\r\n-        CYAN(Color.CYAN),\r\n-        WHITE(Color.WHITE),\r\n-        DEFAULT(Color.DEFAULT),\r\n-\r\n-        // Foreground Colors\r\n-        FG_BLACK(Color.BLACK, false),\r\n-        FG_RED(Color.RED, false),\r\n-        FG_GREEN(Color.GREEN, false),\r\n-        FG_YELLOW(Color.YELLOW, false),\r\n-        FG_BLUE(Color.BLUE, false),\r\n-        FG_MAGENTA(Color.MAGENTA, false),\r\n-        FG_CYAN(Color.CYAN, false),\r\n-        FG_WHITE(Color.WHITE, false),\r\n-        FG_DEFAULT(Color.DEFAULT, false),\r\n-\r\n-        // Background Colors\r\n-        BG_BLACK(Color.BLACK, true),\r\n-        BG_RED(Color.RED, true),\r\n-        BG_GREEN(Color.GREEN, true),\r\n-        BG_YELLOW(Color.YELLOW, true),\r\n-        BG_BLUE(Color.BLUE, true),\r\n-        BG_MAGENTA(Color.MAGENTA, true),\r\n-        BG_CYAN(Color.CYAN, true),\r\n-        BG_WHITE(Color.WHITE, true),\r\n-        BG_DEFAULT(Color.DEFAULT, true),\r\n-\r\n-        // Attributes\r\n-        RESET(Attribute.RESET),\r\n-        INTENSITY_BOLD(Attribute.INTENSITY_BOLD),\r\n-        INTENSITY_FAINT(Attribute.INTENSITY_FAINT),\r\n-        ITALIC(Attribute.ITALIC),\r\n-        UNDERLINE(Attribute.UNDERLINE),\r\n-        BLINK_SLOW(Attribute.BLINK_SLOW),\r\n-        BLINK_FAST(Attribute.BLINK_FAST),\r\n-        BLINK_OFF(Attribute.BLINK_OFF),\r\n-        NEGATIVE_ON(Attribute.NEGATIVE_ON),\r\n-        NEGATIVE_OFF(Attribute.NEGATIVE_OFF),\r\n-        CONCEAL_ON(Attribute.CONCEAL_ON),\r\n-        CONCEAL_OFF(Attribute.CONCEAL_OFF),\r\n-        UNDERLINE_DOUBLE(Attribute.UNDERLINE_DOUBLE),\r\n-        UNDERLINE_OFF(Attribute.UNDERLINE_OFF),\r\n-\r\n-        // Aliases\r\n-        BOLD(Attribute.INTENSITY_BOLD),\r\n-        FAINT(Attribute.INTENSITY_FAINT),;\r\n-\r\n-        private final Enum<?> n;\r\n-\r\n-        private final boolean background;\r\n-\r\n-        Code(final Enum<?> n, boolean background) {\r\n-            this.n = n;\r\n-            this.background = background;\r\n-        }\r\n-\r\n-        Code(final Enum<?> n) {\r\n-            this(n, false);\r\n-        }\r\n-\r\n-        public boolean isColor() {\r\n-            return n instanceof Ansi.Color;\r\n-        }\r\n-\r\n-        public Ansi.Color getColor() {\r\n-            return (Ansi.Color) n;\r\n-        }\r\n-\r\n-        public boolean isAttribute() {\r\n-            return n instanceof Attribute;\r\n-        }\r\n-\r\n-        public Attribute getAttribute() {\r\n-            return (Attribute) n;\r\n-        }\r\n-\r\n-        public boolean isBackground() {\r\n-            return background;\r\n-        }\r\n-    }\r\n-\r\n-    private AnsiRenderer() {\r\n-    }\r\n-\r\n+/*\n+ * Copyright (C) 2009-2021 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.IOException;\n+import java.util.Locale;\n+\n+import org.fusesource.jansi.Ansi.Attribute;\n+import org.fusesource.jansi.Ansi.Color;\n+\n+/**\n+ * Renders ANSI color escape-codes in strings by parsing out some special syntax to pick up the correct fluff to use.\n+ *\n+ * The syntax for embedded ANSI codes is:\n+ *\n+ * <pre>\n+ *   &#64;|<em>code</em>(,<em>code</em>)* <em>text</em>|&#64;\n+ * </pre>\n+ *\n+ * Examples:\n+ *\n+ * <pre>\n+ *   &#64;|bold Hello|&#64;\n+ * </pre>\n+ *\n+ * <pre>\n+ *   &#64;|bold,red Warning!|&#64;\n+ * </pre>\n+ *\n+ * @since 2.2\n+ */\n+public class AnsiRenderer {\n+\n+    public static final String BEGIN_TOKEN = \"@|\";\n+\n+    public static final String END_TOKEN = \"|@\";\n+\n+    public static final String CODE_TEXT_SEPARATOR = \" \";\n+\n+    public static final String CODE_LIST_SEPARATOR = \",\";\n+\n+    private static final int BEGIN_TOKEN_LEN = 2;\n+\n+    private static final int END_TOKEN_LEN = 2;\n+\n+    public static String render(final String input) throws IllegalArgumentException {\n+        try {\n+            return render(input, new StringBuilder()).toString();\n+        } catch (IOException e) {\n+            // Cannot happen because StringBuilder does not throw IOException\n+            throw new IllegalArgumentException(e);\n+        }\n+    }\n+\n+    /**\n+     * Renders the given input to the target Appendable.\n+     *\n+     * @param input\n+     *            source to render\n+     * @param target\n+     *            render onto this target Appendable.\n+     * @return the given Appendable\n+     * @throws IOException\n+     *             If an I/O error occurs\n+     */\n+    public static Appendable render(final String input, Appendable target) throws IOException {\n+\n+        int i = 0;\n+        int j, k;\n+\n+        while (true) {\n+            j = input.indexOf(BEGIN_TOKEN, i);\n+            if (j == -1) {\n+                if (i == 0) {\n+                    target.append(input);\n+                    return target;\n+                }\n+                target.append(input.substring(i));\n+                return target;\n+            }\n+            target.append(input.substring(i, j));\n+            k = input.indexOf(END_TOKEN, j);\n+\n+            if (k == -1) {\n+                target.append(input);\n+                return target;\n+            }\n+            j += BEGIN_TOKEN_LEN;\n+            String spec = input.substring(j, k);\n+\n+            String[] items = spec.split(CODE_TEXT_SEPARATOR, 2);\n+            if (items.length == 1) {\n+                target.append(input);\n+                return target;\n+            }\n+            String replacement = render(items[1], items[0].split(CODE_LIST_SEPARATOR));\n+\n+            target.append(replacement);\n+\n+            i = k + END_TOKEN_LEN;\n+        }\n+    }\n+\n+    public static String render(final String text, final String... codes) {\n+        return render(Ansi.ansi(), codes)\n+                .a(text).reset().toString();\n+    }\n+\n+    /**\n+     * Renders {@link Code} names as an ANSI escape string.\n+     * @param codes The code names to render\n+     * @return an ANSI escape string.\n+     */\n+    public static String renderCodes(final String... codes) {\n+        return render(Ansi.ansi(), codes).toString();\n+    }\n+\n+    /**\n+     * Renders {@link Code} names as an ANSI escape string.\n+     * @param codes A space separated list of code names to render\n+     * @return an ANSI escape string.\n+     */\n+    public static String renderCodes(final String codes) {\n+        return renderCodes(codes.split(\"\\\\s\"));\n+    }\n+\n+    private static Ansi render(Ansi ansi, String... names) {\n+        for (String name : names) {\n+            Code code = Code.valueOf(name.toUpperCase(Locale.ENGLISH));\n+            if (code.isColor()) {\n+                if (code.isBackground()) {\n+                    ansi.bg(code.getColor());\n+                } else {\n+                    ansi.fg(code.getColor());\n+                }\n+            } else if (code.isAttribute()) {\n+                ansi.a(code.getAttribute());\n+            }\n+        }\n+        return ansi;\n+    }\n+\n+    public static boolean test(final String text) {\n+        return text != null && text.contains(BEGIN_TOKEN);\n+    }\n+\n+    @SuppressWarnings(\"unused\")\n+    public enum Code {\n+        //\n+        // TODO: Find a better way to keep Code in sync with Color/Attribute/Erase\n+        //\n+\n+        // Colors\n+        BLACK(Color.BLACK),\n+        RED(Color.RED),\n+        GREEN(Color.GREEN),\n+        YELLOW(Color.YELLOW),\n+        BLUE(Color.BLUE),\n+        MAGENTA(Color.MAGENTA),\n+        CYAN(Color.CYAN),\n+        WHITE(Color.WHITE),\n+        DEFAULT(Color.DEFAULT),\n+\n+        // Foreground Colors\n+        FG_BLACK(Color.BLACK, false),\n+        FG_RED(Color.RED, false),\n+        FG_GREEN(Color.GREEN, false),\n+        FG_YELLOW(Color.YELLOW, false),\n+        FG_BLUE(Color.BLUE, false),\n+        FG_MAGENTA(Color.MAGENTA, false),\n+        FG_CYAN(Color.CYAN, false),\n+        FG_WHITE(Color.WHITE, false),\n+        FG_DEFAULT(Color.DEFAULT, false),\n+\n+        // Background Colors\n+        BG_BLACK(Color.BLACK, true),\n+        BG_RED(Color.RED, true),\n+        BG_GREEN(Color.GREEN, true),\n+        BG_YELLOW(Color.YELLOW, true),\n+        BG_BLUE(Color.BLUE, true),\n+        BG_MAGENTA(Color.MAGENTA, true),\n+        BG_CYAN(Color.CYAN, true),\n+        BG_WHITE(Color.WHITE, true),\n+        BG_DEFAULT(Color.DEFAULT, true),\n+\n+        // Attributes\n+        RESET(Attribute.RESET),\n+        INTENSITY_BOLD(Attribute.INTENSITY_BOLD),\n+        INTENSITY_FAINT(Attribute.INTENSITY_FAINT),\n+        ITALIC(Attribute.ITALIC),\n+        UNDERLINE(Attribute.UNDERLINE),\n+        BLINK_SLOW(Attribute.BLINK_SLOW),\n+        BLINK_FAST(Attribute.BLINK_FAST),\n+        BLINK_OFF(Attribute.BLINK_OFF),\n+        NEGATIVE_ON(Attribute.NEGATIVE_ON),\n+        NEGATIVE_OFF(Attribute.NEGATIVE_OFF),\n+        CONCEAL_ON(Attribute.CONCEAL_ON),\n+        CONCEAL_OFF(Attribute.CONCEAL_OFF),\n+        UNDERLINE_DOUBLE(Attribute.UNDERLINE_DOUBLE),\n+        UNDERLINE_OFF(Attribute.UNDERLINE_OFF),\n+\n+        // Aliases\n+        BOLD(Attribute.INTENSITY_BOLD),\n+        FAINT(Attribute.INTENSITY_FAINT),;\n+\n+        private final Enum<?> n;\n+\n+        private final boolean background;\n+\n+        Code(final Enum<?> n, boolean background) {\n+            this.n = n;\n+            this.background = background;\n+        }\n+\n+        Code(final Enum<?> n) {\n+            this(n, false);\n+        }\n+\n+        public boolean isColor() {\n+            return n instanceof Ansi.Color;\n+        }\n+\n+        public Ansi.Color getColor() {\n+            return (Ansi.Color) n;\n+        }\n+\n+        public boolean isAttribute() {\n+            return n instanceof Attribute;\n+        }\n+\n+        public Attribute getAttribute() {\n+            return (Attribute) n;\n+        }\n+\n+        public boolean isBackground() {\n+            return background;\n+        }\n+    }\n+\n+    private AnsiRenderer() {\n+    }\n+\n }\n"}, {"source1": "org/fusesource/jansi/AnsiType.java", "source2": "org/fusesource/jansi/AnsiType.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,40 +1,40 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-/**\r\n- * Processor type.\r\n- *\r\n- * @since 2.1\r\n- */\r\n-public enum AnsiType {\r\n-\r\n-    Native(\"Supports ansi sequences natively\"),\r\n-    Unsupported(\"Ansi sequences are stripped out\"),\r\n-    VirtualTerminal(\"Supported through windows virtual terminal\"),\r\n-    Emulation(\"Emulated through using windows API console commands\"),\r\n-    Redirected(\"The stream is redirected to a file or a pipe\");\r\n-\r\n-    private final String description;\r\n-\r\n-    AnsiType(String description) {\r\n-        this.description = description;\r\n-    }\r\n-\r\n-    String getDescription() {\r\n-        return description;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+/**\n+ * Processor type.\n+ *\n+ * @since 2.1\n+ */\n+public enum AnsiType {\n+\n+    Native(\"Supports ansi sequences natively\"),\n+    Unsupported(\"Ansi sequences are stripped out\"),\n+    VirtualTerminal(\"Supported through windows virtual terminal\"),\n+    Emulation(\"Emulated through using windows API console commands\"),\n+    Redirected(\"The stream is redirected to a file or a pipe\");\n+\n+    private final String description;\n+\n+    AnsiType(String description) {\n+        this.description = description;\n+    }\n+\n+    String getDescription() {\n+        return description;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/WindowsSupport.java", "source2": "org/fusesource/jansi/WindowsSupport.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,42 +1,42 @@\n-/*\r\n- * Copyright (C) 2009-2019 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.UnsupportedEncodingException;\r\n-\r\n-import static org.fusesource.jansi.internal.Kernel32.FORMAT_MESSAGE_FROM_SYSTEM;\r\n-import static org.fusesource.jansi.internal.Kernel32.FormatMessageW;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetLastError;\r\n-\r\n-public class WindowsSupport {\r\n-\r\n-    public static String getLastErrorMessage() {\r\n-        int errorCode = GetLastError();\r\n-        return getErrorMessage(errorCode);\r\n-    }\r\n-\r\n-    public static String getErrorMessage(int errorCode) {\r\n-        int bufferSize = 160;\r\n-        byte data[] = new byte[bufferSize];\r\n-        FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, 0, errorCode, 0, data, bufferSize, null);\r\n-        try {\r\n-            return new String(data, \"UTF-16LE\").trim();\r\n-        } catch (UnsupportedEncodingException e) {\r\n-            throw new IllegalStateException(e);\r\n-        }\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2019 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.UnsupportedEncodingException;\n+\n+import static org.fusesource.jansi.internal.Kernel32.FORMAT_MESSAGE_FROM_SYSTEM;\n+import static org.fusesource.jansi.internal.Kernel32.FormatMessageW;\n+import static org.fusesource.jansi.internal.Kernel32.GetLastError;\n+\n+public class WindowsSupport {\n+\n+    public static String getLastErrorMessage() {\n+        int errorCode = GetLastError();\n+        return getErrorMessage(errorCode);\n+    }\n+\n+    public static String getErrorMessage(int errorCode) {\n+        int bufferSize = 160;\n+        byte data[] = new byte[bufferSize];\n+        FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, 0, errorCode, 0, data, bufferSize, null);\n+        try {\n+            return new String(data, \"UTF-16LE\").trim();\n+        } catch (UnsupportedEncodingException e) {\n+            throw new IllegalStateException(e);\n+        }\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/CLibrary.java", "source2": "org/fusesource/jansi/internal/CLibrary.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,171 +1,171 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-/**\r\n- * Interface to access some low level POSIX functions, loaded by\r\n- * <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\r\n- * as <code>jansi</code> library.\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @see JansiLoader\r\n- */\r\n-@SuppressWarnings(\"unused\")\r\n-public class CLibrary {\r\n-\r\n-    static {\r\n-        JansiLoader.initialize();\r\n-        init();\r\n-    }\r\n-\r\n-    private static native void init();\r\n-\r\n-    public static int STDOUT_FILENO = 1;\r\n-\r\n-    public static int STDERR_FILENO = 2;\r\n-\r\n-    public static boolean HAVE_ISATTY;\r\n-\r\n-    public static boolean HAVE_TTYNAME;\r\n-\r\n-    public static int TCSANOW;\r\n-    public static int TCSADRAIN;\r\n-    public static int TCSAFLUSH;\r\n-    public static long TIOCGETA;\r\n-    public static long TIOCSETA;\r\n-    public static long TIOCGETD;\r\n-    public static long TIOCSETD;\r\n-    public static long TIOCGWINSZ;\r\n-    public static long TIOCSWINSZ;\r\n-\r\n-    /**\r\n-     * test whether a file descriptor refers to a terminal\r\n-     *\r\n-     * @param fd file descriptor\r\n-     * @return isatty() returns 1 if fd is an open file descriptor referring to a\r\n-     * terminal; otherwise 0 is returned, and errno is set to indicate the\r\n-     * error\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3.html\">ISATTY(3) man-page</a>\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3p.html\">ISATTY(3P) man-page</a>\r\n-     */\r\n-    public static native int isatty(int fd);\r\n-\r\n-    public static native String ttyname(int filedes);\r\n-\r\n-    /**\r\n-     * The openpty() function finds an available pseudoterminal and returns\r\n-     * file descriptors for the master and slave in amaster and aslave.\r\n-     *\r\n-     * @param amaster master return value\r\n-     * @param aslave  slave return value\r\n-     * @param name    filename return value\r\n-     * @param termios optional pty attributes\r\n-     * @param winsize optional size\r\n-     * @return 0 on success\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/openpty.3.html\">OPENPTY(3) man-page</a>\r\n-     */\r\n-    public static native int openpty(\r\n-            int[] amaster,\r\n-            int[] aslave,\r\n-            byte[] name,\r\n-            Termios termios,\r\n-            WinSize winsize);\r\n-\r\n-    public static native int tcgetattr(\r\n-            int filedes,\r\n-            Termios termios);\r\n-\r\n-    public static native int tcsetattr(\r\n-            int filedes,\r\n-            int optional_actions,\r\n-            Termios termios);\r\n-\r\n-    /**\r\n-     * Control a STREAMS device.\r\n-     *\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/ioctl.3p.html\">IOCTL(3P) man-page</a>\r\n-     */\r\n-    public static native int ioctl(\r\n-            int filedes,\r\n-            long request,\r\n-            int[] params);\r\n-\r\n-    public static native int ioctl(\r\n-            int filedes,\r\n-            long request,\r\n-            WinSize params);\r\n-\r\n-    /**\r\n-     * Window sizes.\r\n-     *\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man4/tty_ioctl.4.html\">IOCTL_TTY(2) man-page</a>\r\n-     */\r\n-    public static class WinSize {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short ws_row;\r\n-        public short ws_col;\r\n-        public short ws_xpixel;\r\n-        public short ws_ypixel;\r\n-\r\n-        public WinSize() {\r\n-        }\r\n-\r\n-        public WinSize(short ws_row, short ws_col) {\r\n-            this.ws_row = ws_row;\r\n-            this.ws_col = ws_col;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * termios structure for termios functions, describing a general terminal interface that is\r\n-     * provided to control asynchronous communications ports\r\n-     *\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/termios.3.html\">TERMIOS(3) man-page</a>\r\n-     */\r\n-    public static class Termios {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public long c_iflag;\r\n-        public long c_oflag;\r\n-        public long c_cflag;\r\n-        public long c_lflag;\r\n-        public byte[] c_cc = new byte[32];\r\n-        public long c_ispeed;\r\n-        public long c_ospeed;\r\n-    }\r\n-\r\n-    public static native int setenv(String name, String value);\r\n-\r\n-    public static native int chdir(String path);\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.internal;\n+\n+/**\n+ * Interface to access some low level POSIX functions, loaded by\n+ * <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\n+ * as <code>jansi</code> library.\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @see JansiLoader\n+ */\n+@SuppressWarnings(\"unused\")\n+public class CLibrary {\n+\n+    static {\n+        JansiLoader.initialize();\n+        init();\n+    }\n+\n+    private static native void init();\n+\n+    public static int STDOUT_FILENO = 1;\n+\n+    public static int STDERR_FILENO = 2;\n+\n+    public static boolean HAVE_ISATTY;\n+\n+    public static boolean HAVE_TTYNAME;\n+\n+    public static int TCSANOW;\n+    public static int TCSADRAIN;\n+    public static int TCSAFLUSH;\n+    public static long TIOCGETA;\n+    public static long TIOCSETA;\n+    public static long TIOCGETD;\n+    public static long TIOCSETD;\n+    public static long TIOCGWINSZ;\n+    public static long TIOCSWINSZ;\n+\n+    /**\n+     * test whether a file descriptor refers to a terminal\n+     *\n+     * @param fd file descriptor\n+     * @return isatty() returns 1 if fd is an open file descriptor referring to a\n+     * terminal; otherwise 0 is returned, and errno is set to indicate the\n+     * error\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3.html\">ISATTY(3) man-page</a>\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3p.html\">ISATTY(3P) man-page</a>\n+     */\n+    public static native int isatty(int fd);\n+\n+    public static native String ttyname(int filedes);\n+\n+    /**\n+     * The openpty() function finds an available pseudoterminal and returns\n+     * file descriptors for the master and slave in amaster and aslave.\n+     *\n+     * @param amaster master return value\n+     * @param aslave  slave return value\n+     * @param name    filename return value\n+     * @param termios optional pty attributes\n+     * @param winsize optional size\n+     * @return 0 on success\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/openpty.3.html\">OPENPTY(3) man-page</a>\n+     */\n+    public static native int openpty(\n+            int[] amaster,\n+            int[] aslave,\n+            byte[] name,\n+            Termios termios,\n+            WinSize winsize);\n+\n+    public static native int tcgetattr(\n+            int filedes,\n+            Termios termios);\n+\n+    public static native int tcsetattr(\n+            int filedes,\n+            int optional_actions,\n+            Termios termios);\n+\n+    /**\n+     * Control a STREAMS device.\n+     *\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/ioctl.3p.html\">IOCTL(3P) man-page</a>\n+     */\n+    public static native int ioctl(\n+            int filedes,\n+            long request,\n+            int[] params);\n+\n+    public static native int ioctl(\n+            int filedes,\n+            long request,\n+            WinSize params);\n+\n+    /**\n+     * Window sizes.\n+     *\n+     * @see <a href=\"http://man7.org/linux/man-pages/man4/tty_ioctl.4.html\">IOCTL_TTY(2) man-page</a>\n+     */\n+    public static class WinSize {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short ws_row;\n+        public short ws_col;\n+        public short ws_xpixel;\n+        public short ws_ypixel;\n+\n+        public WinSize() {\n+        }\n+\n+        public WinSize(short ws_row, short ws_col) {\n+            this.ws_row = ws_row;\n+            this.ws_col = ws_col;\n+        }\n+    }\n+\n+    /**\n+     * termios structure for termios functions, describing a general terminal interface that is\n+     * provided to control asynchronous communications ports\n+     *\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/termios.3.html\">TERMIOS(3) man-page</a>\n+     */\n+    public static class Termios {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public long c_iflag;\n+        public long c_oflag;\n+        public long c_cflag;\n+        public long c_lflag;\n+        public byte[] c_cc = new byte[32];\n+        public long c_ispeed;\n+        public long c_ospeed;\n+    }\n+\n+    public static native int setenv(String name, String value);\n+\n+    public static native int chdir(String path);\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/JansiLoader.java", "source2": "org/fusesource/jansi/internal/JansiLoader.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,393 +1,393 @@\n-/*--------------------------------------------------------------------------\r\n- *  Copyright 2007 Taro L. Saito\r\n- *\r\n- *  Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- *  you may not use this file except in compliance with the License.\r\n- *  You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- *  Unless required by applicable law or agreed to in writing, software\r\n- *  distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- *  See the License for the specific language governing permissions and\r\n- *  limitations under the License.\r\n- *--------------------------------------------------------------------------*/\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-import java.io.File;\r\n-import java.io.FileInputStream;\r\n-import java.io.FileOutputStream;\r\n-import java.io.FilenameFilter;\r\n-import java.io.IOException;\r\n-import java.io.InputStream;\r\n-import java.io.OutputStream;\r\n-import java.net.URL;\r\n-import java.util.Arrays;\r\n-import java.util.LinkedList;\r\n-import java.util.List;\r\n-import java.util.Properties;\r\n-import java.util.Random;\r\n-\r\n-/**\r\n- * Set the system properties, org.jansi.lib.path, org.jansi.lib.name,\r\n- * appropriately so that jansi can find *.dll, *.jnilib and\r\n- * *.so files, according to the current OS (win, linux, mac).\r\n- * <p>\r\n- * The library files are automatically extracted from this project's package\r\n- * (JAR).\r\n- * <p>\r\n- * usage: call {@link #initialize()} before using Jansi.\r\n- */\r\n-public class JansiLoader {\r\n-\r\n-    private static boolean extracted = false;\r\n-    private static String nativeLibraryPath;\r\n-    private static String nativeLibrarySourceUrl;\r\n-\r\n-    /**\r\n-     * Loads Jansi native library.\r\n-     *\r\n-     * @return True if jansi native library is successfully loaded; false\r\n-     * otherwise.\r\n-     */\r\n-    public static synchronized boolean initialize() {\r\n-        // only cleanup before the first extract\r\n-        if (!extracted) {\r\n-            cleanup();\r\n-        }\r\n-        try {\r\n-            loadJansiNativeLibrary();\r\n-        } catch (Exception e) {\r\n-            throw new RuntimeException(\"Unable to load jansi native library\", e);\r\n-        }\r\n-        return extracted;\r\n-    }\r\n-\r\n-    public static String getNativeLibraryPath() {\r\n-        return nativeLibraryPath;\r\n-    }\r\n-\r\n-    public static String getNativeLibrarySourceUrl() {\r\n-        return nativeLibrarySourceUrl;\r\n-    }\r\n-\r\n-    private static File getTempDir() {\r\n-        return new File(System.getProperty(\"jansi.tmpdir\", System.getProperty(\"java.io.tmpdir\")));\r\n-    }\r\n-\r\n-    /**\r\n-     * Deleted old native libraries e.g. on Windows the DLL file is not removed\r\n-     * on VM-Exit (bug #80)\r\n-     */\r\n-    static void cleanup() {\r\n-        String tempFolder = getTempDir().getAbsolutePath();\r\n-        File dir = new File(tempFolder);\r\n-\r\n-        File[] nativeLibFiles = dir.listFiles(new FilenameFilter() {\r\n-            private final String searchPattern = \"jansi-\" + getVersion();\r\n-\r\n-            public boolean accept(File dir, String name) {\r\n-                return name.startsWith(searchPattern) && !name.endsWith(\".lck\");\r\n-            }\r\n-        });\r\n-        if (nativeLibFiles != null) {\r\n-            for (File nativeLibFile : nativeLibFiles) {\r\n-                File lckFile = new File(nativeLibFile.getAbsolutePath() + \".lck\");\r\n-                if (!lckFile.exists()) {\r\n-                    try {\r\n-                        nativeLibFile.delete();\r\n-                    } catch (SecurityException e) {\r\n-                        System.err.println(\"Failed to delete old native lib\" + e.getMessage());\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    private static int readNBytes(InputStream in, byte[] b) throws IOException {\r\n-        int n = 0;\r\n-        int len = b.length;\r\n-        while (n < len) {\r\n-            int count = in.read(b, n, len - n);\r\n-            if (count <= 0)\r\n-                break;\r\n-            n += count;\r\n-        }\r\n-        return n;\r\n-    }\r\n-\r\n-    private static String contentsEquals(InputStream in1, InputStream in2) throws IOException {\r\n-        byte[] buffer1 = new byte[8192];\r\n-        byte[] buffer2 = new byte[8192];\r\n-        int numRead1;\r\n-        int numRead2;\r\n-        while (true) {\r\n-            numRead1 = readNBytes(in1, buffer1);\r\n-            numRead2 = readNBytes(in2, buffer2);\r\n-            if (numRead1 > 0) {\r\n-                if (numRead2 <= 0) {\r\n-                    return \"EOF on second stream but not first\";\r\n-                }\r\n-                if (numRead2 != numRead1) {\r\n-                    return \"Read size different (\" + numRead1 + \" vs \" + numRead2 + \")\";\r\n-                }\r\n-                // Otherwise same number of bytes read\r\n-                if (!Arrays.equals(buffer1, buffer2)) {\r\n-                    return \"Content differs\";\r\n-                }\r\n-                // Otherwise same bytes read, so continue ...\r\n-            } else {\r\n-                // Nothing more in stream 1 ...\r\n-                if (numRead2 > 0) {\r\n-                    return \"EOF on first stream but not second\";\r\n-                } else {\r\n-                    return null;\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Extracts and loads the specified library file to the target folder\r\n-     *\r\n-     * @param libFolderForCurrentOS Library path.\r\n-     * @param libraryFileName       Library name.\r\n-     * @param targetFolder          Target folder.\r\n-     * @return\r\n-     */\r\n-    private static boolean extractAndLoadLibraryFile(String libFolderForCurrentOS, String libraryFileName,\r\n-                                                     String targetFolder) {\r\n-        String nativeLibraryFilePath = libFolderForCurrentOS + \"/\" + libraryFileName;\r\n-        // Include architecture name in temporary filename in order to avoid conflicts\r\n-        // when multiple JVMs with different architectures running at the same time\r\n-        String uuid = randomUUID();\r\n-        String extractedLibFileName = String.format(\"jansi-%s-%s-%s\", getVersion(), uuid, libraryFileName);\r\n-        String extractedLckFileName = extractedLibFileName + \".lck\";\r\n-\r\n-        File extractedLibFile = new File(targetFolder, extractedLibFileName);\r\n-        File extractedLckFile = new File(targetFolder, extractedLckFileName);\r\n-\r\n-        try {\r\n-            // Extract a native library file into the target directory\r\n-            InputStream in = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\r\n-            try {\r\n-                if (!extractedLckFile.exists()) {\r\n-                    new FileOutputStream(extractedLckFile).close();\r\n-                }\r\n-                OutputStream out = new FileOutputStream(extractedLibFile);\r\n-                try {\r\n-                    copy(in, out);\r\n-                } finally {\r\n-                    out.close();\r\n-                }\r\n-            } finally {\r\n-                // Delete the extracted lib file on JVM exit.\r\n-                extractedLibFile.deleteOnExit();\r\n-                extractedLckFile.deleteOnExit();\r\n-                in.close();\r\n-            }\r\n-\r\n-            // Set executable (x) flag to enable Java to load the native library\r\n-            extractedLibFile.setReadable(true);\r\n-            extractedLibFile.setWritable(true, true);\r\n-            extractedLibFile.setExecutable(true);\r\n-\r\n-            // Check whether the contents are properly copied from the resource folder\r\n-            InputStream nativeIn = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\r\n-            try {\r\n-                InputStream extractedLibIn = new FileInputStream(extractedLibFile);\r\n-                try {\r\n-                    String eq = contentsEquals(nativeIn, extractedLibIn);\r\n-                    if (eq != null) {\r\n-                        throw new RuntimeException(String.format(\"Failed to write a native library file at %s because %s\", extractedLibFile, eq));\r\n-                    }\r\n-                } finally {\r\n-                    extractedLibIn.close();\r\n-                }\r\n-            } finally {\r\n-                nativeIn.close();\r\n-            }\r\n-\r\n-            // Load library\r\n-            if (loadNativeLibrary(extractedLibFile)) {\r\n-                nativeLibrarySourceUrl = JansiLoader.class.getResource(nativeLibraryFilePath).toExternalForm();\r\n-                return true;\r\n-            }\r\n-        } catch (IOException e) {\r\n-            System.err.println(e.getMessage());\r\n-        }\r\n-        return false;\r\n-    }\r\n-\r\n-    private static String randomUUID() {\r\n-        return Long.toHexString(new Random().nextLong());\r\n-    }\r\n-\r\n-    private static void copy(InputStream in, OutputStream out) throws IOException {\r\n-        byte[] buf = new byte[8192];\r\n-        int n;\r\n-        while ((n = in.read(buf)) > 0) {\r\n-            out.write(buf, 0, n);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Loads native library using the given path and name of the library.\r\n-     *\r\n-     * @param libPath Path of the native library.\r\n-     * @return True for successfully loading; false otherwise.\r\n-     */\r\n-    private static boolean loadNativeLibrary(File libPath) {\r\n-        if (libPath.exists()) {\r\n-\r\n-            try {\r\n-                String path = libPath.getAbsolutePath();\r\n-                System.load(path);\r\n-                nativeLibraryPath = path;\r\n-                return true;\r\n-            } catch (UnsatisfiedLinkError e) {\r\n-                System.err.println(\"Failed to load native library:\" + libPath.getName() + \". osinfo: \" + OSInfo.getNativeLibFolderPathForCurrentOS());\r\n-                System.err.println(e);\r\n-                return false;\r\n-            }\r\n-\r\n-        } else {\r\n-            return false;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Loads jansi library using given path and name of the library.\r\n-     *\r\n-     * @throws\r\n-     */\r\n-    private static void loadJansiNativeLibrary() throws Exception {\r\n-        if (extracted) {\r\n-            return;\r\n-        }\r\n-\r\n-        List<String> triedPaths = new LinkedList<String>();\r\n-\r\n-        // Try loading library from library.jansi.path library path */\r\n-        String jansiNativeLibraryPath = System.getProperty(\"library.jansi.path\");\r\n-        String jansiNativeLibraryName = System.getProperty(\"library.jansi.name\");\r\n-        if (jansiNativeLibraryName == null) {\r\n-            jansiNativeLibraryName = System.mapLibraryName(\"jansi\");\r\n-            assert jansiNativeLibraryName != null;\r\n-            if (jansiNativeLibraryName.endsWith(\".dylib\")) {\r\n-                jansiNativeLibraryName = jansiNativeLibraryName.replace(\".dylib\", \".jnilib\");\r\n-            }\r\n-        }\r\n-\r\n-        if (jansiNativeLibraryPath != null) {\r\n-            String withOs = jansiNativeLibraryPath + \"/\" + OSInfo.getNativeLibFolderPathForCurrentOS();\r\n-            if (loadNativeLibrary(new File(withOs, jansiNativeLibraryName))) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(withOs);\r\n-            }\r\n-\r\n-            if (loadNativeLibrary(new File(jansiNativeLibraryPath, jansiNativeLibraryName))) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(jansiNativeLibraryPath);\r\n-            }\r\n-        }\r\n-\r\n-        // Load the os-dependent library from the jar file\r\n-        String packagePath = JansiLoader.class.getPackage().getName().replace('.', '/');\r\n-        jansiNativeLibraryPath = String.format(\"/%s/native/%s\", packagePath, OSInfo.getNativeLibFolderPathForCurrentOS());\r\n-        boolean hasNativeLib = hasResource(jansiNativeLibraryPath + \"/\" + jansiNativeLibraryName);\r\n-\r\n-\r\n-        if (hasNativeLib) {\r\n-            // temporary library folder\r\n-            String tempFolder = getTempDir().getAbsolutePath();\r\n-            // Try extracting the library from jar\r\n-            if (extractAndLoadLibraryFile(jansiNativeLibraryPath, jansiNativeLibraryName, tempFolder)) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(jansiNativeLibraryPath);\r\n-            }\r\n-        }\r\n-\r\n-        // As a last resort try from java.library.path\r\n-        String javaLibraryPath = System.getProperty(\"java.library.path\", \"\");\r\n-        for (String ldPath : javaLibraryPath.split(File.pathSeparator)) {\r\n-            if (ldPath.isEmpty()) {\r\n-                continue;\r\n-            }\r\n-            if (loadNativeLibrary(new File(ldPath, jansiNativeLibraryName))) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(ldPath);\r\n-            }\r\n-        }\r\n-\r\n-        extracted = false;\r\n-        throw new Exception(String.format(\"No native library found for os.name=%s, os.arch=%s, paths=[%s]\",\r\n-                OSInfo.getOSName(), OSInfo.getArchName(), join(triedPaths, File.pathSeparator)));\r\n-    }\r\n-\r\n-    private static boolean hasResource(String path) {\r\n-        return JansiLoader.class.getResource(path) != null;\r\n-    }\r\n-\r\n-\r\n-    /**\r\n-     * @return The major version of the jansi library.\r\n-     */\r\n-    public static int getMajorVersion() {\r\n-        String[] c = getVersion().split(\"\\\\.\");\r\n-        return (c.length > 0) ? Integer.parseInt(c[0]) : 1;\r\n-    }\r\n-\r\n-    /**\r\n-     * @return The minor version of the jansi library.\r\n-     */\r\n-    public static int getMinorVersion() {\r\n-        String[] c = getVersion().split(\"\\\\.\");\r\n-        return (c.length > 1) ? Integer.parseInt(c[1]) : 0;\r\n-    }\r\n-\r\n-    /**\r\n-     * @return The version of the jansi library.\r\n-     */\r\n-    public static String getVersion() {\r\n-\r\n-        URL versionFile = JansiLoader.class.getResource(\"/META-INF/maven/org.fusesource.jansi/jansi/pom.properties\");\r\n-\r\n-        String version = \"unknown\";\r\n-        try {\r\n-            if (versionFile != null) {\r\n-                Properties versionData = new Properties();\r\n-                versionData.load(versionFile.openStream());\r\n-                version = versionData.getProperty(\"version\", version);\r\n-                version = version.trim().replaceAll(\"[^0-9\\\\.]\", \"\");\r\n-            }\r\n-        } catch (IOException e) {\r\n-            System.err.println(e);\r\n-        }\r\n-        return version;\r\n-    }\r\n-\r\n-    private static String join(List<String> list, String separator) {\r\n-        StringBuilder sb = new StringBuilder();\r\n-        boolean first = true;\r\n-        for (String item : list) {\r\n-            if (first)\r\n-                first = false;\r\n-            else\r\n-                sb.append(separator);\r\n-\r\n-            sb.append(item);\r\n-        }\r\n-        return sb.toString();\r\n-    }\r\n-\r\n-}\r\n+/*--------------------------------------------------------------------------\n+ *  Copyright 2007 Taro L. Saito\n+ *\n+ *  Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *  you may not use this file except in compliance with the License.\n+ *  You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ *  Unless required by applicable law or agreed to in writing, software\n+ *  distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *  See the License for the specific language governing permissions and\n+ *  limitations under the License.\n+ *--------------------------------------------------------------------------*/\n+package org.fusesource.jansi.internal;\n+\n+import java.io.File;\n+import java.io.FileInputStream;\n+import java.io.FileOutputStream;\n+import java.io.FilenameFilter;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.OutputStream;\n+import java.net.URL;\n+import java.util.Arrays;\n+import java.util.LinkedList;\n+import java.util.List;\n+import java.util.Properties;\n+import java.util.Random;\n+\n+/**\n+ * Set the system properties, org.jansi.lib.path, org.jansi.lib.name,\n+ * appropriately so that jansi can find *.dll, *.jnilib and\n+ * *.so files, according to the current OS (win, linux, mac).\n+ * <p>\n+ * The library files are automatically extracted from this project's package\n+ * (JAR).\n+ * <p>\n+ * usage: call {@link #initialize()} before using Jansi.\n+ */\n+public class JansiLoader {\n+\n+    private static boolean extracted = false;\n+    private static String nativeLibraryPath;\n+    private static String nativeLibrarySourceUrl;\n+\n+    /**\n+     * Loads Jansi native library.\n+     *\n+     * @return True if jansi native library is successfully loaded; false\n+     * otherwise.\n+     */\n+    public static synchronized boolean initialize() {\n+        // only cleanup before the first extract\n+        if (!extracted) {\n+            cleanup();\n+        }\n+        try {\n+            loadJansiNativeLibrary();\n+        } catch (Exception e) {\n+            throw new RuntimeException(\"Unable to load jansi native library\", e);\n+        }\n+        return extracted;\n+    }\n+\n+    public static String getNativeLibraryPath() {\n+        return nativeLibraryPath;\n+    }\n+\n+    public static String getNativeLibrarySourceUrl() {\n+        return nativeLibrarySourceUrl;\n+    }\n+\n+    private static File getTempDir() {\n+        return new File(System.getProperty(\"jansi.tmpdir\", System.getProperty(\"java.io.tmpdir\")));\n+    }\n+\n+    /**\n+     * Deleted old native libraries e.g. on Windows the DLL file is not removed\n+     * on VM-Exit (bug #80)\n+     */\n+    static void cleanup() {\n+        String tempFolder = getTempDir().getAbsolutePath();\n+        File dir = new File(tempFolder);\n+\n+        File[] nativeLibFiles = dir.listFiles(new FilenameFilter() {\n+            private final String searchPattern = \"jansi-\" + getVersion();\n+\n+            public boolean accept(File dir, String name) {\n+                return name.startsWith(searchPattern) && !name.endsWith(\".lck\");\n+            }\n+        });\n+        if (nativeLibFiles != null) {\n+            for (File nativeLibFile : nativeLibFiles) {\n+                File lckFile = new File(nativeLibFile.getAbsolutePath() + \".lck\");\n+                if (!lckFile.exists()) {\n+                    try {\n+                        nativeLibFile.delete();\n+                    } catch (SecurityException e) {\n+                        System.err.println(\"Failed to delete old native lib\" + e.getMessage());\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+    private static int readNBytes(InputStream in, byte[] b) throws IOException {\n+        int n = 0;\n+        int len = b.length;\n+        while (n < len) {\n+            int count = in.read(b, n, len - n);\n+            if (count <= 0)\n+                break;\n+            n += count;\n+        }\n+        return n;\n+    }\n+\n+    private static String contentsEquals(InputStream in1, InputStream in2) throws IOException {\n+        byte[] buffer1 = new byte[8192];\n+        byte[] buffer2 = new byte[8192];\n+        int numRead1;\n+        int numRead2;\n+        while (true) {\n+            numRead1 = readNBytes(in1, buffer1);\n+            numRead2 = readNBytes(in2, buffer2);\n+            if (numRead1 > 0) {\n+                if (numRead2 <= 0) {\n+                    return \"EOF on second stream but not first\";\n+                }\n+                if (numRead2 != numRead1) {\n+                    return \"Read size different (\" + numRead1 + \" vs \" + numRead2 + \")\";\n+                }\n+                // Otherwise same number of bytes read\n+                if (!Arrays.equals(buffer1, buffer2)) {\n+                    return \"Content differs\";\n+                }\n+                // Otherwise same bytes read, so continue ...\n+            } else {\n+                // Nothing more in stream 1 ...\n+                if (numRead2 > 0) {\n+                    return \"EOF on first stream but not second\";\n+                } else {\n+                    return null;\n+                }\n+            }\n+        }\n+    }\n+\n+    /**\n+     * Extracts and loads the specified library file to the target folder\n+     *\n+     * @param libFolderForCurrentOS Library path.\n+     * @param libraryFileName       Library name.\n+     * @param targetFolder          Target folder.\n+     * @return\n+     */\n+    private static boolean extractAndLoadLibraryFile(String libFolderForCurrentOS, String libraryFileName,\n+                                                     String targetFolder) {\n+        String nativeLibraryFilePath = libFolderForCurrentOS + \"/\" + libraryFileName;\n+        // Include architecture name in temporary filename in order to avoid conflicts\n+        // when multiple JVMs with different architectures running at the same time\n+        String uuid = randomUUID();\n+        String extractedLibFileName = String.format(\"jansi-%s-%s-%s\", getVersion(), uuid, libraryFileName);\n+        String extractedLckFileName = extractedLibFileName + \".lck\";\n+\n+        File extractedLibFile = new File(targetFolder, extractedLibFileName);\n+        File extractedLckFile = new File(targetFolder, extractedLckFileName);\n+\n+        try {\n+            // Extract a native library file into the target directory\n+            InputStream in = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\n+            try {\n+                if (!extractedLckFile.exists()) {\n+                    new FileOutputStream(extractedLckFile).close();\n+                }\n+                OutputStream out = new FileOutputStream(extractedLibFile);\n+                try {\n+                    copy(in, out);\n+                } finally {\n+                    out.close();\n+                }\n+            } finally {\n+                // Delete the extracted lib file on JVM exit.\n+                extractedLibFile.deleteOnExit();\n+                extractedLckFile.deleteOnExit();\n+                in.close();\n+            }\n+\n+            // Set executable (x) flag to enable Java to load the native library\n+            extractedLibFile.setReadable(true);\n+            extractedLibFile.setWritable(true, true);\n+            extractedLibFile.setExecutable(true);\n+\n+            // Check whether the contents are properly copied from the resource folder\n+            InputStream nativeIn = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\n+            try {\n+                InputStream extractedLibIn = new FileInputStream(extractedLibFile);\n+                try {\n+                    String eq = contentsEquals(nativeIn, extractedLibIn);\n+                    if (eq != null) {\n+                        throw new RuntimeException(String.format(\"Failed to write a native library file at %s because %s\", extractedLibFile, eq));\n+                    }\n+                } finally {\n+                    extractedLibIn.close();\n+                }\n+            } finally {\n+                nativeIn.close();\n+            }\n+\n+            // Load library\n+            if (loadNativeLibrary(extractedLibFile)) {\n+                nativeLibrarySourceUrl = JansiLoader.class.getResource(nativeLibraryFilePath).toExternalForm();\n+                return true;\n+            }\n+        } catch (IOException e) {\n+            System.err.println(e.getMessage());\n+        }\n+        return false;\n+    }\n+\n+    private static String randomUUID() {\n+        return Long.toHexString(new Random().nextLong());\n+    }\n+\n+    private static void copy(InputStream in, OutputStream out) throws IOException {\n+        byte[] buf = new byte[8192];\n+        int n;\n+        while ((n = in.read(buf)) > 0) {\n+            out.write(buf, 0, n);\n+        }\n+    }\n+\n+    /**\n+     * Loads native library using the given path and name of the library.\n+     *\n+     * @param libPath Path of the native library.\n+     * @return True for successfully loading; false otherwise.\n+     */\n+    private static boolean loadNativeLibrary(File libPath) {\n+        if (libPath.exists()) {\n+\n+            try {\n+                String path = libPath.getAbsolutePath();\n+                System.load(path);\n+                nativeLibraryPath = path;\n+                return true;\n+            } catch (UnsatisfiedLinkError e) {\n+                System.err.println(\"Failed to load native library:\" + libPath.getName() + \". osinfo: \" + OSInfo.getNativeLibFolderPathForCurrentOS());\n+                System.err.println(e);\n+                return false;\n+            }\n+\n+        } else {\n+            return false;\n+        }\n+    }\n+\n+    /**\n+     * Loads jansi library using given path and name of the library.\n+     *\n+     * @throws\n+     */\n+    private static void loadJansiNativeLibrary() throws Exception {\n+        if (extracted) {\n+            return;\n+        }\n+\n+        List<String> triedPaths = new LinkedList<String>();\n+\n+        // Try loading library from library.jansi.path library path */\n+        String jansiNativeLibraryPath = System.getProperty(\"library.jansi.path\");\n+        String jansiNativeLibraryName = System.getProperty(\"library.jansi.name\");\n+        if (jansiNativeLibraryName == null) {\n+            jansiNativeLibraryName = System.mapLibraryName(\"jansi\");\n+            assert jansiNativeLibraryName != null;\n+            if (jansiNativeLibraryName.endsWith(\".dylib\")) {\n+                jansiNativeLibraryName = jansiNativeLibraryName.replace(\".dylib\", \".jnilib\");\n+            }\n+        }\n+\n+        if (jansiNativeLibraryPath != null) {\n+            String withOs = jansiNativeLibraryPath + \"/\" + OSInfo.getNativeLibFolderPathForCurrentOS();\n+            if (loadNativeLibrary(new File(withOs, jansiNativeLibraryName))) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(withOs);\n+            }\n+\n+            if (loadNativeLibrary(new File(jansiNativeLibraryPath, jansiNativeLibraryName))) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(jansiNativeLibraryPath);\n+            }\n+        }\n+\n+        // Load the os-dependent library from the jar file\n+        String packagePath = JansiLoader.class.getPackage().getName().replace('.', '/');\n+        jansiNativeLibraryPath = String.format(\"/%s/native/%s\", packagePath, OSInfo.getNativeLibFolderPathForCurrentOS());\n+        boolean hasNativeLib = hasResource(jansiNativeLibraryPath + \"/\" + jansiNativeLibraryName);\n+\n+\n+        if (hasNativeLib) {\n+            // temporary library folder\n+            String tempFolder = getTempDir().getAbsolutePath();\n+            // Try extracting the library from jar\n+            if (extractAndLoadLibraryFile(jansiNativeLibraryPath, jansiNativeLibraryName, tempFolder)) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(jansiNativeLibraryPath);\n+            }\n+        }\n+\n+        // As a last resort try from java.library.path\n+        String javaLibraryPath = System.getProperty(\"java.library.path\", \"\");\n+        for (String ldPath : javaLibraryPath.split(File.pathSeparator)) {\n+            if (ldPath.isEmpty()) {\n+                continue;\n+            }\n+            if (loadNativeLibrary(new File(ldPath, jansiNativeLibraryName))) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(ldPath);\n+            }\n+        }\n+\n+        extracted = false;\n+        throw new Exception(String.format(\"No native library found for os.name=%s, os.arch=%s, paths=[%s]\",\n+                OSInfo.getOSName(), OSInfo.getArchName(), join(triedPaths, File.pathSeparator)));\n+    }\n+\n+    private static boolean hasResource(String path) {\n+        return JansiLoader.class.getResource(path) != null;\n+    }\n+\n+\n+    /**\n+     * @return The major version of the jansi library.\n+     */\n+    public static int getMajorVersion() {\n+        String[] c = getVersion().split(\"\\\\.\");\n+        return (c.length > 0) ? Integer.parseInt(c[0]) : 1;\n+    }\n+\n+    /**\n+     * @return The minor version of the jansi library.\n+     */\n+    public static int getMinorVersion() {\n+        String[] c = getVersion().split(\"\\\\.\");\n+        return (c.length > 1) ? Integer.parseInt(c[1]) : 0;\n+    }\n+\n+    /**\n+     * @return The version of the jansi library.\n+     */\n+    public static String getVersion() {\n+\n+        URL versionFile = JansiLoader.class.getResource(\"/META-INF/maven/org.fusesource.jansi/jansi/pom.properties\");\n+\n+        String version = \"unknown\";\n+        try {\n+            if (versionFile != null) {\n+                Properties versionData = new Properties();\n+                versionData.load(versionFile.openStream());\n+                version = versionData.getProperty(\"version\", version);\n+                version = version.trim().replaceAll(\"[^0-9\\\\.]\", \"\");\n+            }\n+        } catch (IOException e) {\n+            System.err.println(e);\n+        }\n+        return version;\n+    }\n+\n+    private static String join(List<String> list, String separator) {\n+        StringBuilder sb = new StringBuilder();\n+        boolean first = true;\n+        for (String item : list) {\n+            if (first)\n+                first = false;\n+            else\n+                sb.append(separator);\n+\n+            sb.append(item);\n+        }\n+        return sb.toString();\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/Kernel32.java", "source2": "org/fusesource/jansi/internal/Kernel32.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,578 +1,578 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-import java.io.IOException;\r\n-\r\n-import org.fusesource.jansi.WindowsSupport;\r\n-\r\n-/**\r\n- * Interface to access Win32 base APIs.\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @author Guillaume Nodet\r\n- * @see JansiLoader\r\n- */\r\n-@SuppressWarnings(\"unused\")\r\n-public class Kernel32 {\r\n-\r\n-    static {\r\n-        JansiLoader.initialize();\r\n-        init();\r\n-    }\r\n-\r\n-    private static native void init();\r\n-\r\n-    public static short FOREGROUND_BLUE;\r\n-    public static short FOREGROUND_GREEN;\r\n-    public static short FOREGROUND_RED;\r\n-    public static short FOREGROUND_INTENSITY;\r\n-    public static short BACKGROUND_BLUE;\r\n-    public static short BACKGROUND_GREEN;\r\n-    public static short BACKGROUND_RED;\r\n-    public static short BACKGROUND_INTENSITY;\r\n-    public static short COMMON_LVB_LEADING_BYTE;\r\n-    public static short COMMON_LVB_TRAILING_BYTE;\r\n-    public static short COMMON_LVB_GRID_HORIZONTAL;\r\n-    public static short COMMON_LVB_GRID_LVERTICAL;\r\n-    public static short COMMON_LVB_GRID_RVERTICAL;\r\n-    public static short COMMON_LVB_REVERSE_VIDEO;\r\n-    public static short COMMON_LVB_UNDERSCORE;\r\n-    public static int FORMAT_MESSAGE_FROM_SYSTEM;\r\n-    public static int STD_INPUT_HANDLE;\r\n-    public static int STD_OUTPUT_HANDLE;\r\n-    public static int STD_ERROR_HANDLE;\r\n-    public static int INVALID_HANDLE_VALUE;\r\n-\r\n-\r\n-    public static native long malloc(long size);\r\n-\r\n-    public static native void free(long ptr);\r\n-\r\n-    /**\r\n-     * http://msdn.microsoft.com/en-us/library/ms686311%28VS.85%29.aspx\r\n-     */\r\n-    static public class SMALL_RECT {\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short left;\r\n-        public short top;\r\n-        public short right;\r\n-        public short bottom;\r\n-\r\n-        public short width() {\r\n-            return (short) (right - left);\r\n-        }\r\n-\r\n-        public short height() {\r\n-            return (short) (bottom - top);\r\n-        }\r\n-\r\n-        public SMALL_RECT copy() {\r\n-            SMALL_RECT rc = new SMALL_RECT();\r\n-            rc.left = left;\r\n-            rc.top = top;\r\n-            rc.right = right;\r\n-            rc.bottom = bottom;\r\n-            return rc;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see http://msdn.microsoft.com/en-us/library/ms686047%28VS.85%29.aspx\r\n-     */\r\n-    public static native int SetConsoleTextAttribute(\r\n-            long consoleOutput,\r\n-            short attributes);\r\n-\r\n-    public static class COORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short x;\r\n-        public short y;\r\n-\r\n-        public COORD copy() {\r\n-            COORD rc = new COORD();\r\n-            rc.x = x;\r\n-            rc.y = y;\r\n-            return rc;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * http://msdn.microsoft.com/en-us/library/ms682093%28VS.85%29.aspx\r\n-     */\r\n-    public static class CONSOLE_SCREEN_BUFFER_INFO {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public COORD size = new COORD();\r\n-        public COORD cursorPosition = new COORD();\r\n-        public short attributes;\r\n-        public SMALL_RECT window = new SMALL_RECT();\r\n-        public COORD maximumWindowSize = new COORD();\r\n-\r\n-        public int windowWidth() {\r\n-            return window.width() + 1;\r\n-        }\r\n-\r\n-        public int windowHeight() {\r\n-            return window.height() + 1;\r\n-        }\r\n-    }\r\n-\r\n-\r\n-    // DWORD WINAPI WaitForSingleObject(\r\n-    //  _In_ HANDLE hHandle,\r\n-    //  _In_ DWORD  dwMilliseconds\r\n-    // );\r\n-    public static native int WaitForSingleObject(long hHandle, int dwMilliseconds);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms724211%28VS.85%29.aspx\r\n-     */\r\n-    public static native int CloseHandle(long handle);\r\n-\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx\r\n-     */\r\n-    public static native int GetLastError();\r\n-\r\n-    public static native int FormatMessageW(\r\n-            int flags,\r\n-            long source,\r\n-            int messageId,\r\n-            int languageId,\r\n-            byte[] buffer,\r\n-            int size,\r\n-            long[] args\r\n-    );\r\n-\r\n-\r\n-    /**\r\n-     * See: http://msdn.microsoft.com/en-us/library/ms683171%28VS.85%29.aspx\r\n-     */\r\n-    public static native int GetConsoleScreenBufferInfo(\r\n-            long consoleOutput,\r\n-            CONSOLE_SCREEN_BUFFER_INFO consoleScreenBufferInfo);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683231%28VS.85%29.aspx\r\n-     */\r\n-    public static native long GetStdHandle(int stdHandle);\r\n-\r\n-    /**\r\n-     * http://msdn.microsoft.com/en-us/library/ms686025%28VS.85%29.aspx\r\n-     */\r\n-    public static native int SetConsoleCursorPosition(\r\n-            long consoleOutput,\r\n-            COORD cursorPosition);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms682663%28VS.85%29.aspx\r\n-     */\r\n-    public static native int FillConsoleOutputCharacterW(\r\n-            long consoleOutput,\r\n-            char character,\r\n-            int length,\r\n-            COORD writeCoord,\r\n-            int[] numberOfCharsWritten);\r\n-\r\n-    /**\r\n-     * see: https://msdn.microsoft.com/en-us/library/ms682662%28VS.85%29.aspx\r\n-     */\r\n-    public static native int FillConsoleOutputAttribute(\r\n-            long consoleOutput,\r\n-            short attribute,\r\n-            int length,\r\n-            COORD writeCoord,\r\n-            int[] numberOfAttrsWritten);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms687401(v=VS.85).aspx\r\n-     */\r\n-    public static native int WriteConsoleW(\r\n-            long consoleOutput,\r\n-            char[] buffer,\r\n-            int numberOfCharsToWrite,\r\n-            int[] numberOfCharsWritten,\r\n-            long reserved);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683167%28VS.85%29.aspx\r\n-     */\r\n-    public static native int GetConsoleMode(\r\n-            long handle,\r\n-            int[] mode);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms686033%28VS.85%29.aspx\r\n-     */\r\n-    public static native int SetConsoleMode(\r\n-            long handle,\r\n-            int mode);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/078sfkak(VS.80).aspx\r\n-     */\r\n-    public static native int _getch();\r\n-\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms686050%28VS.85%29.aspx\r\n-     *\r\n-     * @return 0 if title was set successfully\r\n-     */\r\n-    public static native int SetConsoleTitle(\r\n-            String title);\r\n-\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683169(v=VS.85).aspx\r\n-     *\r\n-     * @return the current output code page\r\n-     */\r\n-    public static native int GetConsoleOutputCP();\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms686036(v=VS.85).aspx\r\n-     *\r\n-     * @return non 0 if code page was set\r\n-     */\r\n-    public static native int SetConsoleOutputCP(int codePageID);\r\n-\r\n-    /**\r\n-     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682013(v=vs.85).aspx\r\n-     */\r\n-    public static class CHAR_INFO {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short attributes;\r\n-        public char unicodeChar;\r\n-    }\r\n-\r\n-    /**\r\n-     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms685107(v=vs.85).aspx\r\n-     */\r\n-    public static native int ScrollConsoleScreenBuffer(\r\n-            long consoleOutput,\r\n-            SMALL_RECT scrollRectangle,\r\n-            SMALL_RECT clipRectangle,\r\n-            COORD destinationOrigin,\r\n-            CHAR_INFO fill);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684166(v=VS.85).aspx\r\n-     */\r\n-    public static class KEY_EVENT_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public static int CAPSLOCK_ON;\r\n-        public static int NUMLOCK_ON;\r\n-        public static int SCROLLLOCK_ON;\r\n-        public static int ENHANCED_KEY;\r\n-        public static int LEFT_ALT_PRESSED;\r\n-        public static int LEFT_CTRL_PRESSED;\r\n-        public static int RIGHT_ALT_PRESSED;\r\n-        public static int RIGHT_CTRL_PRESSED;\r\n-        public static int SHIFT_PRESSED;\r\n-\r\n-        public boolean keyDown;\r\n-        public short repeatCount;\r\n-        public short keyCode;\r\n-        public short scanCode;\r\n-        public char uchar;\r\n-        public int controlKeyState;\r\n-\r\n-        public String toString() {\r\n-            return \"KEY_EVENT_RECORD{\" +\r\n-                    \"keyDown=\" + keyDown +\r\n-                    \", repeatCount=\" + repeatCount +\r\n-                    \", keyCode=\" + keyCode +\r\n-                    \", scanCode=\" + scanCode +\r\n-                    \", uchar=\" + uchar +\r\n-                    \", controlKeyState=\" + controlKeyState +\r\n-                    '}';\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684239(v=VS.85).aspx\r\n-     */\r\n-    public static class MOUSE_EVENT_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public static int FROM_LEFT_1ST_BUTTON_PRESSED;\r\n-        public static int FROM_LEFT_2ND_BUTTON_PRESSED;\r\n-        public static int FROM_LEFT_3RD_BUTTON_PRESSED;\r\n-        public static int FROM_LEFT_4TH_BUTTON_PRESSED;\r\n-        public static int RIGHTMOST_BUTTON_PRESSED;\r\n-\r\n-        public static int CAPSLOCK_ON;\r\n-        public static int NUMLOCK_ON;\r\n-        public static int SCROLLLOCK_ON;\r\n-        public static int ENHANCED_KEY;\r\n-        public static int LEFT_ALT_PRESSED;\r\n-        public static int LEFT_CTRL_PRESSED;\r\n-        public static int RIGHT_ALT_PRESSED;\r\n-        public static int RIGHT_CTRL_PRESSED;\r\n-        public static int SHIFT_PRESSED;\r\n-\r\n-        public static int DOUBLE_CLICK;\r\n-        public static int MOUSE_HWHEELED;\r\n-        public static int MOUSE_MOVED;\r\n-        public static int MOUSE_WHEELED;\r\n-\r\n-        public COORD mousePosition = new COORD();\r\n-        public int buttonState;\r\n-        public int controlKeyState;\r\n-        public int eventFlags;\r\n-\r\n-        public String toString() {\r\n-            return \"MOUSE_EVENT_RECORD{\" +\r\n-                    \"mousePosition=\" + mousePosition +\r\n-                    \", buttonState=\" + buttonState +\r\n-                    \", controlKeyState=\" + controlKeyState +\r\n-                    \", eventFlags=\" + eventFlags +\r\n-                    '}';\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms687093(v=VS.85).aspx\r\n-     */\r\n-    public static class WINDOW_BUFFER_SIZE_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public COORD size = new COORD();\r\n-\r\n-        public String toString() {\r\n-            return \"WINDOW_BUFFER_SIZE_RECORD{size=\" + size + '}';\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683149(v=VS.85).aspx\r\n-     */\r\n-    public static class FOCUS_EVENT_RECORD {\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public boolean setFocus;\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684213(v=VS.85).aspx\r\n-     */\r\n-    public static class MENU_EVENT_RECORD {\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public int commandId;\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683499(v=VS.85).aspx\r\n-     */\r\n-    public static class INPUT_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public static short KEY_EVENT;\r\n-        public static short MOUSE_EVENT;\r\n-        public static short WINDOW_BUFFER_SIZE_EVENT;\r\n-        public static short FOCUS_EVENT;\r\n-        public static short MENU_EVENT;\r\n-        public short eventType;\r\n-        public KEY_EVENT_RECORD keyEvent = new KEY_EVENT_RECORD();\r\n-        public MOUSE_EVENT_RECORD mouseEvent = new MOUSE_EVENT_RECORD();\r\n-        public WINDOW_BUFFER_SIZE_RECORD windowBufferSizeEvent = new WINDOW_BUFFER_SIZE_RECORD();\r\n-        public MENU_EVENT_RECORD menuEvent = new MENU_EVENT_RECORD();\r\n-        public FOCUS_EVENT_RECORD focusEvent = new FOCUS_EVENT_RECORD();\r\n-\r\n-        public static native void memmove(\r\n-                INPUT_RECORD dest,\r\n-                long src,\r\n-                long size);\r\n-\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684961(v=VS.85).aspx\r\n-     */\r\n-    private static native int ReadConsoleInputW(\r\n-            long handle,\r\n-            long inputRecord,\r\n-            int length,\r\n-            int[] eventsCount);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684344(v=VS.85).aspx\r\n-     */\r\n-    private static native int PeekConsoleInputW(\r\n-            long handle,\r\n-            long inputRecord,\r\n-            int length,\r\n-            int[] eventsCount);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683207(v=VS.85).aspx\r\n-     */\r\n-    public static native int GetNumberOfConsoleInputEvents(\r\n-            long handle,\r\n-            int[] numberOfEvents);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683147(v=VS.85).aspx\r\n-     */\r\n-    public static native int FlushConsoleInputBuffer(\r\n-            long handle);\r\n-\r\n-    /**\r\n-     * Return console input events.\r\n-     */\r\n-    public static INPUT_RECORD[] readConsoleInputHelper(\r\n-            long handle, int count, boolean peek) throws IOException {\r\n-        int[] length = new int[1];\r\n-        int res;\r\n-        long inputRecordPtr = 0;\r\n-        try {\r\n-            inputRecordPtr = malloc(INPUT_RECORD.SIZEOF * count);\r\n-            if (inputRecordPtr == 0) {\r\n-                throw new IOException(\"cannot allocate memory with JNI\");\r\n-            }\r\n-            res = peek ?\r\n-                    PeekConsoleInputW(handle, inputRecordPtr, count, length)\r\n-                    : ReadConsoleInputW(handle, inputRecordPtr, count, length);\r\n-            if (res == 0) {\r\n-                throw new IOException(\"ReadConsoleInputW failed: \" + WindowsSupport.getLastErrorMessage());\r\n-            }\r\n-            if (length[0] <= 0) {\r\n-                return new INPUT_RECORD[0];\r\n-            }\r\n-            INPUT_RECORD[] records = new INPUT_RECORD[length[0]];\r\n-            for (int i = 0; i < records.length; i++) {\r\n-                records[i] = new INPUT_RECORD();\r\n-                INPUT_RECORD.memmove(records[i], inputRecordPtr + i * INPUT_RECORD.SIZEOF, INPUT_RECORD.SIZEOF);\r\n-            }\r\n-            return records;\r\n-        } finally {\r\n-            if (inputRecordPtr != 0) {\r\n-                free(inputRecordPtr);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Return console input key events (discard other events).\r\n-     *\r\n-     * @param count requested number of events\r\n-     * @return array possibly of size smaller then count\r\n-     */\r\n-    public static INPUT_RECORD[] readConsoleKeyInput(long handle, int count, boolean peek)\r\n-            throws IOException {\r\n-        while (true) {\r\n-            // read events until we have keyboard events, the queue could be full\r\n-            // of mouse events.\r\n-            INPUT_RECORD[] evts = readConsoleInputHelper(handle, count, peek);\r\n-            int keyEvtCount = 0;\r\n-            for (INPUT_RECORD evt : evts) {\r\n-                if (evt.eventType == INPUT_RECORD.KEY_EVENT) keyEvtCount++;\r\n-            }\r\n-            if (keyEvtCount > 0) {\r\n-                INPUT_RECORD[] res = new INPUT_RECORD[keyEvtCount];\r\n-                int i = 0;\r\n-                for (INPUT_RECORD evt : evts) {\r\n-                    if (evt.eventType == INPUT_RECORD.KEY_EVENT) {\r\n-                        res[i++] = evt;\r\n-                    }\r\n-                }\r\n-                return res;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.internal;\n+\n+import java.io.IOException;\n+\n+import org.fusesource.jansi.WindowsSupport;\n+\n+/**\n+ * Interface to access Win32 base APIs.\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @author Guillaume Nodet\n+ * @see JansiLoader\n+ */\n+@SuppressWarnings(\"unused\")\n+public class Kernel32 {\n+\n+    static {\n+        JansiLoader.initialize();\n+        init();\n+    }\n+\n+    private static native void init();\n+\n+    public static short FOREGROUND_BLUE;\n+    public static short FOREGROUND_GREEN;\n+    public static short FOREGROUND_RED;\n+    public static short FOREGROUND_INTENSITY;\n+    public static short BACKGROUND_BLUE;\n+    public static short BACKGROUND_GREEN;\n+    public static short BACKGROUND_RED;\n+    public static short BACKGROUND_INTENSITY;\n+    public static short COMMON_LVB_LEADING_BYTE;\n+    public static short COMMON_LVB_TRAILING_BYTE;\n+    public static short COMMON_LVB_GRID_HORIZONTAL;\n+    public static short COMMON_LVB_GRID_LVERTICAL;\n+    public static short COMMON_LVB_GRID_RVERTICAL;\n+    public static short COMMON_LVB_REVERSE_VIDEO;\n+    public static short COMMON_LVB_UNDERSCORE;\n+    public static int FORMAT_MESSAGE_FROM_SYSTEM;\n+    public static int STD_INPUT_HANDLE;\n+    public static int STD_OUTPUT_HANDLE;\n+    public static int STD_ERROR_HANDLE;\n+    public static int INVALID_HANDLE_VALUE;\n+\n+\n+    public static native long malloc(long size);\n+\n+    public static native void free(long ptr);\n+\n+    /**\n+     * http://msdn.microsoft.com/en-us/library/ms686311%28VS.85%29.aspx\n+     */\n+    static public class SMALL_RECT {\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short left;\n+        public short top;\n+        public short right;\n+        public short bottom;\n+\n+        public short width() {\n+            return (short) (right - left);\n+        }\n+\n+        public short height() {\n+            return (short) (bottom - top);\n+        }\n+\n+        public SMALL_RECT copy() {\n+            SMALL_RECT rc = new SMALL_RECT();\n+            rc.left = left;\n+            rc.top = top;\n+            rc.right = right;\n+            rc.bottom = bottom;\n+            return rc;\n+        }\n+    }\n+\n+    /**\n+     * see http://msdn.microsoft.com/en-us/library/ms686047%28VS.85%29.aspx\n+     */\n+    public static native int SetConsoleTextAttribute(\n+            long consoleOutput,\n+            short attributes);\n+\n+    public static class COORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short x;\n+        public short y;\n+\n+        public COORD copy() {\n+            COORD rc = new COORD();\n+            rc.x = x;\n+            rc.y = y;\n+            return rc;\n+        }\n+    }\n+\n+    /**\n+     * http://msdn.microsoft.com/en-us/library/ms682093%28VS.85%29.aspx\n+     */\n+    public static class CONSOLE_SCREEN_BUFFER_INFO {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public COORD size = new COORD();\n+        public COORD cursorPosition = new COORD();\n+        public short attributes;\n+        public SMALL_RECT window = new SMALL_RECT();\n+        public COORD maximumWindowSize = new COORD();\n+\n+        public int windowWidth() {\n+            return window.width() + 1;\n+        }\n+\n+        public int windowHeight() {\n+            return window.height() + 1;\n+        }\n+    }\n+\n+\n+    // DWORD WINAPI WaitForSingleObject(\n+    //  _In_ HANDLE hHandle,\n+    //  _In_ DWORD  dwMilliseconds\n+    // );\n+    public static native int WaitForSingleObject(long hHandle, int dwMilliseconds);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms724211%28VS.85%29.aspx\n+     */\n+    public static native int CloseHandle(long handle);\n+\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx\n+     */\n+    public static native int GetLastError();\n+\n+    public static native int FormatMessageW(\n+            int flags,\n+            long source,\n+            int messageId,\n+            int languageId,\n+            byte[] buffer,\n+            int size,\n+            long[] args\n+    );\n+\n+\n+    /**\n+     * See: http://msdn.microsoft.com/en-us/library/ms683171%28VS.85%29.aspx\n+     */\n+    public static native int GetConsoleScreenBufferInfo(\n+            long consoleOutput,\n+            CONSOLE_SCREEN_BUFFER_INFO consoleScreenBufferInfo);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683231%28VS.85%29.aspx\n+     */\n+    public static native long GetStdHandle(int stdHandle);\n+\n+    /**\n+     * http://msdn.microsoft.com/en-us/library/ms686025%28VS.85%29.aspx\n+     */\n+    public static native int SetConsoleCursorPosition(\n+            long consoleOutput,\n+            COORD cursorPosition);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms682663%28VS.85%29.aspx\n+     */\n+    public static native int FillConsoleOutputCharacterW(\n+            long consoleOutput,\n+            char character,\n+            int length,\n+            COORD writeCoord,\n+            int[] numberOfCharsWritten);\n+\n+    /**\n+     * see: https://msdn.microsoft.com/en-us/library/ms682662%28VS.85%29.aspx\n+     */\n+    public static native int FillConsoleOutputAttribute(\n+            long consoleOutput,\n+            short attribute,\n+            int length,\n+            COORD writeCoord,\n+            int[] numberOfAttrsWritten);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms687401(v=VS.85).aspx\n+     */\n+    public static native int WriteConsoleW(\n+            long consoleOutput,\n+            char[] buffer,\n+            int numberOfCharsToWrite,\n+            int[] numberOfCharsWritten,\n+            long reserved);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683167%28VS.85%29.aspx\n+     */\n+    public static native int GetConsoleMode(\n+            long handle,\n+            int[] mode);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms686033%28VS.85%29.aspx\n+     */\n+    public static native int SetConsoleMode(\n+            long handle,\n+            int mode);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/078sfkak(VS.80).aspx\n+     */\n+    public static native int _getch();\n+\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms686050%28VS.85%29.aspx\n+     *\n+     * @return 0 if title was set successfully\n+     */\n+    public static native int SetConsoleTitle(\n+            String title);\n+\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683169(v=VS.85).aspx\n+     *\n+     * @return the current output code page\n+     */\n+    public static native int GetConsoleOutputCP();\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms686036(v=VS.85).aspx\n+     *\n+     * @return non 0 if code page was set\n+     */\n+    public static native int SetConsoleOutputCP(int codePageID);\n+\n+    /**\n+     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682013(v=vs.85).aspx\n+     */\n+    public static class CHAR_INFO {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short attributes;\n+        public char unicodeChar;\n+    }\n+\n+    /**\n+     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms685107(v=vs.85).aspx\n+     */\n+    public static native int ScrollConsoleScreenBuffer(\n+            long consoleOutput,\n+            SMALL_RECT scrollRectangle,\n+            SMALL_RECT clipRectangle,\n+            COORD destinationOrigin,\n+            CHAR_INFO fill);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684166(v=VS.85).aspx\n+     */\n+    public static class KEY_EVENT_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public static int CAPSLOCK_ON;\n+        public static int NUMLOCK_ON;\n+        public static int SCROLLLOCK_ON;\n+        public static int ENHANCED_KEY;\n+        public static int LEFT_ALT_PRESSED;\n+        public static int LEFT_CTRL_PRESSED;\n+        public static int RIGHT_ALT_PRESSED;\n+        public static int RIGHT_CTRL_PRESSED;\n+        public static int SHIFT_PRESSED;\n+\n+        public boolean keyDown;\n+        public short repeatCount;\n+        public short keyCode;\n+        public short scanCode;\n+        public char uchar;\n+        public int controlKeyState;\n+\n+        public String toString() {\n+            return \"KEY_EVENT_RECORD{\" +\n+                    \"keyDown=\" + keyDown +\n+                    \", repeatCount=\" + repeatCount +\n+                    \", keyCode=\" + keyCode +\n+                    \", scanCode=\" + scanCode +\n+                    \", uchar=\" + uchar +\n+                    \", controlKeyState=\" + controlKeyState +\n+                    '}';\n+        }\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684239(v=VS.85).aspx\n+     */\n+    public static class MOUSE_EVENT_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public static int FROM_LEFT_1ST_BUTTON_PRESSED;\n+        public static int FROM_LEFT_2ND_BUTTON_PRESSED;\n+        public static int FROM_LEFT_3RD_BUTTON_PRESSED;\n+        public static int FROM_LEFT_4TH_BUTTON_PRESSED;\n+        public static int RIGHTMOST_BUTTON_PRESSED;\n+\n+        public static int CAPSLOCK_ON;\n+        public static int NUMLOCK_ON;\n+        public static int SCROLLLOCK_ON;\n+        public static int ENHANCED_KEY;\n+        public static int LEFT_ALT_PRESSED;\n+        public static int LEFT_CTRL_PRESSED;\n+        public static int RIGHT_ALT_PRESSED;\n+        public static int RIGHT_CTRL_PRESSED;\n+        public static int SHIFT_PRESSED;\n+\n+        public static int DOUBLE_CLICK;\n+        public static int MOUSE_HWHEELED;\n+        public static int MOUSE_MOVED;\n+        public static int MOUSE_WHEELED;\n+\n+        public COORD mousePosition = new COORD();\n+        public int buttonState;\n+        public int controlKeyState;\n+        public int eventFlags;\n+\n+        public String toString() {\n+            return \"MOUSE_EVENT_RECORD{\" +\n+                    \"mousePosition=\" + mousePosition +\n+                    \", buttonState=\" + buttonState +\n+                    \", controlKeyState=\" + controlKeyState +\n+                    \", eventFlags=\" + eventFlags +\n+                    '}';\n+        }\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms687093(v=VS.85).aspx\n+     */\n+    public static class WINDOW_BUFFER_SIZE_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public COORD size = new COORD();\n+\n+        public String toString() {\n+            return \"WINDOW_BUFFER_SIZE_RECORD{size=\" + size + '}';\n+        }\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683149(v=VS.85).aspx\n+     */\n+    public static class FOCUS_EVENT_RECORD {\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public boolean setFocus;\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684213(v=VS.85).aspx\n+     */\n+    public static class MENU_EVENT_RECORD {\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public int commandId;\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683499(v=VS.85).aspx\n+     */\n+    public static class INPUT_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public static short KEY_EVENT;\n+        public static short MOUSE_EVENT;\n+        public static short WINDOW_BUFFER_SIZE_EVENT;\n+        public static short FOCUS_EVENT;\n+        public static short MENU_EVENT;\n+        public short eventType;\n+        public KEY_EVENT_RECORD keyEvent = new KEY_EVENT_RECORD();\n+        public MOUSE_EVENT_RECORD mouseEvent = new MOUSE_EVENT_RECORD();\n+        public WINDOW_BUFFER_SIZE_RECORD windowBufferSizeEvent = new WINDOW_BUFFER_SIZE_RECORD();\n+        public MENU_EVENT_RECORD menuEvent = new MENU_EVENT_RECORD();\n+        public FOCUS_EVENT_RECORD focusEvent = new FOCUS_EVENT_RECORD();\n+\n+        public static native void memmove(\n+                INPUT_RECORD dest,\n+                long src,\n+                long size);\n+\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684961(v=VS.85).aspx\n+     */\n+    private static native int ReadConsoleInputW(\n+            long handle,\n+            long inputRecord,\n+            int length,\n+            int[] eventsCount);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684344(v=VS.85).aspx\n+     */\n+    private static native int PeekConsoleInputW(\n+            long handle,\n+            long inputRecord,\n+            int length,\n+            int[] eventsCount);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683207(v=VS.85).aspx\n+     */\n+    public static native int GetNumberOfConsoleInputEvents(\n+            long handle,\n+            int[] numberOfEvents);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683147(v=VS.85).aspx\n+     */\n+    public static native int FlushConsoleInputBuffer(\n+            long handle);\n+\n+    /**\n+     * Return console input events.\n+     */\n+    public static INPUT_RECORD[] readConsoleInputHelper(\n+            long handle, int count, boolean peek) throws IOException {\n+        int[] length = new int[1];\n+        int res;\n+        long inputRecordPtr = 0;\n+        try {\n+            inputRecordPtr = malloc(INPUT_RECORD.SIZEOF * count);\n+            if (inputRecordPtr == 0) {\n+                throw new IOException(\"cannot allocate memory with JNI\");\n+            }\n+            res = peek ?\n+                    PeekConsoleInputW(handle, inputRecordPtr, count, length)\n+                    : ReadConsoleInputW(handle, inputRecordPtr, count, length);\n+            if (res == 0) {\n+                throw new IOException(\"ReadConsoleInputW failed: \" + WindowsSupport.getLastErrorMessage());\n+            }\n+            if (length[0] <= 0) {\n+                return new INPUT_RECORD[0];\n+            }\n+            INPUT_RECORD[] records = new INPUT_RECORD[length[0]];\n+            for (int i = 0; i < records.length; i++) {\n+                records[i] = new INPUT_RECORD();\n+                INPUT_RECORD.memmove(records[i], inputRecordPtr + i * INPUT_RECORD.SIZEOF, INPUT_RECORD.SIZEOF);\n+            }\n+            return records;\n+        } finally {\n+            if (inputRecordPtr != 0) {\n+                free(inputRecordPtr);\n+            }\n+        }\n+    }\n+\n+    /**\n+     * Return console input key events (discard other events).\n+     *\n+     * @param count requested number of events\n+     * @return array possibly of size smaller then count\n+     */\n+    public static INPUT_RECORD[] readConsoleKeyInput(long handle, int count, boolean peek)\n+            throws IOException {\n+        while (true) {\n+            // read events until we have keyboard events, the queue could be full\n+            // of mouse events.\n+            INPUT_RECORD[] evts = readConsoleInputHelper(handle, count, peek);\n+            int keyEvtCount = 0;\n+            for (INPUT_RECORD evt : evts) {\n+                if (evt.eventType == INPUT_RECORD.KEY_EVENT) keyEvtCount++;\n+            }\n+            if (keyEvtCount > 0) {\n+                INPUT_RECORD[] res = new INPUT_RECORD[keyEvtCount];\n+                int i = 0;\n+                for (INPUT_RECORD evt : evts) {\n+                    if (evt.eventType == INPUT_RECORD.KEY_EVENT) {\n+                        res[i++] = evt;\n+                    }\n+                }\n+                return res;\n+            }\n+        }\n+    }\n+\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/OSInfo.java", "source2": "org/fusesource/jansi/internal/OSInfo.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,214 +1,214 @@\n-/*--------------------------------------------------------------------------\r\n- *  Copyright 2008 Taro L. Saito\r\n- *\r\n- *  Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- *  you may not use this file except in compliance with the License.\r\n- *  You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- *  Unless required by applicable law or agreed to in writing, software\r\n- *  distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- *  See the License for the specific language governing permissions and\r\n- *  limitations under the License.\r\n- *--------------------------------------------------------------------------*/\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-import java.io.ByteArrayOutputStream;\r\n-import java.io.IOException;\r\n-import java.io.InputStream;\r\n-import java.util.HashMap;\r\n-import java.util.Locale;\r\n-\r\n-/**\r\n- * Provides OS name and architecture name.\r\n- *\r\n- * @author leo\r\n- */\r\n-public class OSInfo {\r\n-\r\n-    public static final String X86 = \"x86\";\r\n-    public static final String X86_64 = \"x86_64\";\r\n-    public static final String IA64_32 = \"ia64_32\";\r\n-    public static final String IA64 = \"ia64\";\r\n-    public static final String PPC = \"ppc\";\r\n-    public static final String PPC64 = \"ppc64\";\r\n-\r\n-    private static final HashMap<String, String> archMapping = new HashMap<String, String>();\r\n-    static {\r\n-        // x86 mappings\r\n-        archMapping.put(X86, X86);\r\n-        archMapping.put(\"i386\", X86);\r\n-        archMapping.put(\"i486\", X86);\r\n-        archMapping.put(\"i586\", X86);\r\n-        archMapping.put(\"i686\", X86);\r\n-        archMapping.put(\"pentium\", X86);\r\n-\r\n-        // x86_64 mappings\r\n-        archMapping.put(X86_64, X86_64);\r\n-        archMapping.put(\"amd64\", X86_64);\r\n-        archMapping.put(\"em64t\", X86_64);\r\n-        archMapping.put(\"universal\", X86_64); // Needed for openjdk7 in Mac\r\n-\r\n-        // Itenium 64-bit mappings\r\n-        archMapping.put(IA64, IA64);\r\n-        archMapping.put(\"ia64w\", IA64);\r\n-\r\n-        // Itenium 32-bit mappings, usually an HP-UX construct\r\n-        archMapping.put(IA64_32, IA64_32);\r\n-        archMapping.put(\"ia64n\", IA64_32);\r\n-\r\n-        // PowerPC mappings\r\n-        archMapping.put(PPC, PPC);\r\n-        archMapping.put(\"power\", PPC);\r\n-        archMapping.put(\"powerpc\", PPC);\r\n-        archMapping.put(\"power_pc\", PPC);\r\n-        archMapping.put(\"power_rs\", PPC);\r\n-\r\n-        // TODO: PowerPC 64bit mappings\r\n-        archMapping.put(PPC64, PPC64);\r\n-        archMapping.put(\"power64\", PPC64);\r\n-        archMapping.put(\"powerpc64\", PPC64);\r\n-        archMapping.put(\"power_pc64\", PPC64);\r\n-        archMapping.put(\"power_rs64\", PPC64);\r\n-    }\r\n-\r\n-\r\n-    public static void main(String[] args) {\r\n-        if (args.length >= 1) {\r\n-            if (\"--os\".equals(args[0])) {\r\n-                System.out.print(getOSName());\r\n-                return;\r\n-            } else if (\"--arch\".equals(args[0])) {\r\n-                System.out.print(getArchName());\r\n-                return;\r\n-            }\r\n-        }\r\n-\r\n-        System.out.print(getNativeLibFolderPathForCurrentOS());\r\n-    }\r\n-\r\n-    public static String getNativeLibFolderPathForCurrentOS() {\r\n-        return getOSName() + \"/\" + getArchName();\r\n-    }\r\n-\r\n-    public static String getOSName() {\r\n-        return translateOSNameToFolderName(System.getProperty(\"os.name\"));\r\n-    }\r\n-\r\n-    public static boolean isAndroid() {\r\n-        return System.getProperty(\"java.runtime.name\", \"\").toLowerCase().contains(\"android\");\r\n-    }\r\n-\r\n-    public static boolean isAlpine() {\r\n-        try {\r\n-            Process p = Runtime.getRuntime().exec(\"cat /etc/os-release | grep ^ID\");\r\n-            p.waitFor();\r\n-\r\n-            InputStream in = p.getInputStream();\r\n-            try {\r\n-                return readFully(in).toLowerCase().contains(\"alpine\");\r\n-            } finally {\r\n-                in.close();\r\n-            }\r\n-\r\n-        } catch (Throwable e) {\r\n-            return false;\r\n-        }\r\n-\r\n-    }\r\n-\r\n-    static String getHardwareName() {\r\n-        try {\r\n-            Process p = Runtime.getRuntime().exec(\"uname -m\");\r\n-            p.waitFor();\r\n-\r\n-            InputStream in = p.getInputStream();\r\n-            try {\r\n-                return readFully(in);\r\n-            } finally {\r\n-                in.close();\r\n-            }\r\n-        } catch (Throwable e) {\r\n-            System.err.println(\"Error while running uname -m: \" + e.getMessage());\r\n-            return \"unknown\";\r\n-        }\r\n-    }\r\n-\r\n-    private static String readFully(InputStream in) throws IOException {\r\n-        int readLen = 0;\r\n-        ByteArrayOutputStream b = new ByteArrayOutputStream();\r\n-        byte[] buf = new byte[32];\r\n-        while ((readLen = in.read(buf, 0, buf.length)) >= 0) {\r\n-            b.write(buf, 0, readLen);\r\n-        }\r\n-        return b.toString();\r\n-    }\r\n-\r\n-    static String resolveArmArchType() {\r\n-        if (System.getProperty(\"os.name\").contains(\"Linux\")) {\r\n-            String armType = getHardwareName();\r\n-            // armType (uname -m) can be armv5t, armv5te, armv5tej, armv5tejl, armv6, armv7, armv7l, aarch64, i686\r\n-            if (armType.startsWith(\"armv6\")) {\r\n-                // Raspberry PI\r\n-                return \"armv6\";\r\n-            } else if (armType.startsWith(\"armv7\")) {\r\n-                // Generic\r\n-                return \"armv7\";\r\n-            } else if (armType.startsWith(\"armv5\")) {\r\n-                // Use armv5, soft-float ABI\r\n-                return \"arm\";\r\n-            } else if (armType.equals(\"aarch64\")) {\r\n-                // Use arm64\r\n-                return \"arm64\";\r\n-            }\r\n-\r\n-            // Java 1.8 introduces a system property to determine armel or armhf\r\n-            // http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8005545\r\n-            String abi = System.getProperty(\"sun.arch.abi\");\r\n-            if (abi != null && abi.startsWith(\"gnueabihf\")) {\r\n-                return \"armv7\";\r\n-            }\r\n-        }\r\n-        // Use armv5, soft-float ABI\r\n-        return \"arm\";\r\n-    }\r\n-\r\n-    public static String getArchName() {\r\n-        String osArch = System.getProperty(\"os.arch\");\r\n-        // For Android\r\n-        if (isAndroid()) {\r\n-            return \"android-arm\";\r\n-        }\r\n-\r\n-        if (osArch.startsWith(\"arm\")) {\r\n-            osArch = resolveArmArchType();\r\n-        } else {\r\n-            String lc = osArch.toLowerCase(Locale.US);\r\n-            if (archMapping.containsKey(lc))\r\n-                return archMapping.get(lc);\r\n-        }\r\n-        return translateArchNameToFolderName(osArch);\r\n-    }\r\n-\r\n-    static String translateOSNameToFolderName(String osName) {\r\n-        if (osName.contains(\"Windows\")) {\r\n-            return \"Windows\";\r\n-        } else if (osName.contains(\"Mac\") || osName.contains(\"Darwin\")) {\r\n-            return \"Mac\";\r\n-//        } else if (isAlpine()) {\r\n-//            return \"Linux-Alpine\";\r\n-        } else if (osName.contains(\"Linux\")) {\r\n-            return \"Linux\";\r\n-        } else if (osName.contains(\"AIX\")) {\r\n-            return \"AIX\";\r\n-        } else {\r\n-            return osName.replaceAll(\"\\\\W\", \"\");\r\n-        }\r\n-    }\r\n-\r\n-    static String translateArchNameToFolderName(String archName) {\r\n-        return archName.replaceAll(\"\\\\W\", \"\");\r\n-    }\r\n-}\r\n+/*--------------------------------------------------------------------------\n+ *  Copyright 2008 Taro L. Saito\n+ *\n+ *  Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *  you may not use this file except in compliance with the License.\n+ *  You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ *  Unless required by applicable law or agreed to in writing, software\n+ *  distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *  See the License for the specific language governing permissions and\n+ *  limitations under the License.\n+ *--------------------------------------------------------------------------*/\n+package org.fusesource.jansi.internal;\n+\n+import java.io.ByteArrayOutputStream;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.util.HashMap;\n+import java.util.Locale;\n+\n+/**\n+ * Provides OS name and architecture name.\n+ *\n+ * @author leo\n+ */\n+public class OSInfo {\n+\n+    public static final String X86 = \"x86\";\n+    public static final String X86_64 = \"x86_64\";\n+    public static final String IA64_32 = \"ia64_32\";\n+    public static final String IA64 = \"ia64\";\n+    public static final String PPC = \"ppc\";\n+    public static final String PPC64 = \"ppc64\";\n+\n+    private static final HashMap<String, String> archMapping = new HashMap<String, String>();\n+    static {\n+        // x86 mappings\n+        archMapping.put(X86, X86);\n+        archMapping.put(\"i386\", X86);\n+        archMapping.put(\"i486\", X86);\n+        archMapping.put(\"i586\", X86);\n+        archMapping.put(\"i686\", X86);\n+        archMapping.put(\"pentium\", X86);\n+\n+        // x86_64 mappings\n+        archMapping.put(X86_64, X86_64);\n+        archMapping.put(\"amd64\", X86_64);\n+        archMapping.put(\"em64t\", X86_64);\n+        archMapping.put(\"universal\", X86_64); // Needed for openjdk7 in Mac\n+\n+        // Itenium 64-bit mappings\n+        archMapping.put(IA64, IA64);\n+        archMapping.put(\"ia64w\", IA64);\n+\n+        // Itenium 32-bit mappings, usually an HP-UX construct\n+        archMapping.put(IA64_32, IA64_32);\n+        archMapping.put(\"ia64n\", IA64_32);\n+\n+        // PowerPC mappings\n+        archMapping.put(PPC, PPC);\n+        archMapping.put(\"power\", PPC);\n+        archMapping.put(\"powerpc\", PPC);\n+        archMapping.put(\"power_pc\", PPC);\n+        archMapping.put(\"power_rs\", PPC);\n+\n+        // TODO: PowerPC 64bit mappings\n+        archMapping.put(PPC64, PPC64);\n+        archMapping.put(\"power64\", PPC64);\n+        archMapping.put(\"powerpc64\", PPC64);\n+        archMapping.put(\"power_pc64\", PPC64);\n+        archMapping.put(\"power_rs64\", PPC64);\n+    }\n+\n+\n+    public static void main(String[] args) {\n+        if (args.length >= 1) {\n+            if (\"--os\".equals(args[0])) {\n+                System.out.print(getOSName());\n+                return;\n+            } else if (\"--arch\".equals(args[0])) {\n+                System.out.print(getArchName());\n+                return;\n+            }\n+        }\n+\n+        System.out.print(getNativeLibFolderPathForCurrentOS());\n+    }\n+\n+    public static String getNativeLibFolderPathForCurrentOS() {\n+        return getOSName() + \"/\" + getArchName();\n+    }\n+\n+    public static String getOSName() {\n+        return translateOSNameToFolderName(System.getProperty(\"os.name\"));\n+    }\n+\n+    public static boolean isAndroid() {\n+        return System.getProperty(\"java.runtime.name\", \"\").toLowerCase().contains(\"android\");\n+    }\n+\n+    public static boolean isAlpine() {\n+        try {\n+            Process p = Runtime.getRuntime().exec(\"cat /etc/os-release | grep ^ID\");\n+            p.waitFor();\n+\n+            InputStream in = p.getInputStream();\n+            try {\n+                return readFully(in).toLowerCase().contains(\"alpine\");\n+            } finally {\n+                in.close();\n+            }\n+\n+        } catch (Throwable e) {\n+            return false;\n+        }\n+\n+    }\n+\n+    static String getHardwareName() {\n+        try {\n+            Process p = Runtime.getRuntime().exec(\"uname -m\");\n+            p.waitFor();\n+\n+            InputStream in = p.getInputStream();\n+            try {\n+                return readFully(in);\n+            } finally {\n+                in.close();\n+            }\n+        } catch (Throwable e) {\n+            System.err.println(\"Error while running uname -m: \" + e.getMessage());\n+            return \"unknown\";\n+        }\n+    }\n+\n+    private static String readFully(InputStream in) throws IOException {\n+        int readLen = 0;\n+        ByteArrayOutputStream b = new ByteArrayOutputStream();\n+        byte[] buf = new byte[32];\n+        while ((readLen = in.read(buf, 0, buf.length)) >= 0) {\n+            b.write(buf, 0, readLen);\n+        }\n+        return b.toString();\n+    }\n+\n+    static String resolveArmArchType() {\n+        if (System.getProperty(\"os.name\").contains(\"Linux\")) {\n+            String armType = getHardwareName();\n+            // armType (uname -m) can be armv5t, armv5te, armv5tej, armv5tejl, armv6, armv7, armv7l, aarch64, i686\n+            if (armType.startsWith(\"armv6\")) {\n+                // Raspberry PI\n+                return \"armv6\";\n+            } else if (armType.startsWith(\"armv7\")) {\n+                // Generic\n+                return \"armv7\";\n+            } else if (armType.startsWith(\"armv5\")) {\n+                // Use armv5, soft-float ABI\n+                return \"arm\";\n+            } else if (armType.equals(\"aarch64\")) {\n+                // Use arm64\n+                return \"arm64\";\n+            }\n+\n+            // Java 1.8 introduces a system property to determine armel or armhf\n+            // http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8005545\n+            String abi = System.getProperty(\"sun.arch.abi\");\n+            if (abi != null && abi.startsWith(\"gnueabihf\")) {\n+                return \"armv7\";\n+            }\n+        }\n+        // Use armv5, soft-float ABI\n+        return \"arm\";\n+    }\n+\n+    public static String getArchName() {\n+        String osArch = System.getProperty(\"os.arch\");\n+        // For Android\n+        if (isAndroid()) {\n+            return \"android-arm\";\n+        }\n+\n+        if (osArch.startsWith(\"arm\")) {\n+            osArch = resolveArmArchType();\n+        } else {\n+            String lc = osArch.toLowerCase(Locale.US);\n+            if (archMapping.containsKey(lc))\n+                return archMapping.get(lc);\n+        }\n+        return translateArchNameToFolderName(osArch);\n+    }\n+\n+    static String translateOSNameToFolderName(String osName) {\n+        if (osName.contains(\"Windows\")) {\n+            return \"Windows\";\n+        } else if (osName.contains(\"Mac\") || osName.contains(\"Darwin\")) {\n+            return \"Mac\";\n+//        } else if (isAlpine()) {\n+//            return \"Linux-Alpine\";\n+        } else if (osName.contains(\"Linux\")) {\n+            return \"Linux\";\n+        } else if (osName.contains(\"AIX\")) {\n+            return \"AIX\";\n+        } else {\n+            return osName.replaceAll(\"\\\\W\", \"\");\n+        }\n+    }\n+\n+    static String translateArchNameToFolderName(String archName) {\n+        return archName.replaceAll(\"\\\\W\", \"\");\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/io/AnsiOutputStream.java", "source2": "org/fusesource/jansi/io/AnsiOutputStream.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,350 +1,350 @@\n-/*\r\n- * Copyright (C) 2009-2020 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.FilterOutputStream;\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.nio.charset.Charset;\r\n-import java.util.ArrayList;\r\n-\r\n-import org.fusesource.jansi.AnsiColors;\r\n-import org.fusesource.jansi.AnsiMode;\r\n-import org.fusesource.jansi.AnsiType;\r\n-\r\n-/**\r\n- * A ANSI print stream extracts ANSI escape codes written to \r\n- * an output stream and calls corresponding <code>AnsiProcessor.process*</code> methods.\r\n- * This particular class is not synchronized for improved performances.\r\n- *\r\n- * <p>For more information about ANSI escape codes, see\r\n- * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\r\n- *\r\n- * @author Guillaume Nodet\r\n- * @since 1.0\r\n- * @see AnsiProcessor\r\n- */\r\n-public class AnsiOutputStream extends FilterOutputStream {\r\n-\r\n-    public static final byte[] RESET_CODE = \"\\033[0m\".getBytes();\r\n-\r\n-    public interface IoRunnable {\r\n-        void run() throws IOException;\r\n-    }\r\n-\r\n-    public interface WidthSupplier {\r\n-        int getTerminalWidth();\r\n-    }\r\n-\r\n-    public static class ZeroWidthSupplier implements WidthSupplier {\r\n-        @Override\r\n-        public int getTerminalWidth() {\r\n-            return 0;\r\n-        }\r\n-    }\r\n-\r\n-    private static final int LOOKING_FOR_FIRST_ESC_CHAR = 0;\r\n-    private static final int LOOKING_FOR_SECOND_ESC_CHAR = 1;\r\n-    private static final int LOOKING_FOR_NEXT_ARG = 2;\r\n-    private static final int LOOKING_FOR_STR_ARG_END = 3;\r\n-    private static final int LOOKING_FOR_INT_ARG_END = 4;\r\n-    private static final int LOOKING_FOR_OSC_COMMAND = 5;\r\n-    private static final int LOOKING_FOR_OSC_COMMAND_END = 6;\r\n-    private static final int LOOKING_FOR_OSC_PARAM = 7;\r\n-    private static final int LOOKING_FOR_ST = 8;\r\n-    private static final int LOOKING_FOR_CHARSET = 9;\r\n-\r\n-    private static final int FIRST_ESC_CHAR = 27;\r\n-    private static final int SECOND_ESC_CHAR = '[';\r\n-    private static final int SECOND_OSC_CHAR = ']';\r\n-    private static final int BEL = 7;\r\n-    private static final int SECOND_ST_CHAR = '\\\\';\r\n-    private static final int SECOND_CHARSET0_CHAR = '(';\r\n-    private static final int SECOND_CHARSET1_CHAR = ')';\r\n-\r\n-    private AnsiProcessor ap;\r\n-    private final static int MAX_ESCAPE_SEQUENCE_LENGTH = 100;\r\n-    private final byte[] buffer = new byte[MAX_ESCAPE_SEQUENCE_LENGTH];\r\n-    private int pos = 0;\r\n-    private int startOfValue;\r\n-    private final ArrayList<Object> options = new ArrayList<Object>();\r\n-    private int state = LOOKING_FOR_FIRST_ESC_CHAR;\r\n-    private final Charset cs;\r\n-\r\n-    private final WidthSupplier width;\r\n-    private final AnsiProcessor processor;\r\n-    private final AnsiType type;\r\n-    private final AnsiColors colors;\r\n-    private final IoRunnable installer;\r\n-    private final IoRunnable uninstaller;\r\n-    private AnsiMode mode;\r\n-    private boolean resetAtUninstall;\r\n-\r\n-    public AnsiOutputStream(OutputStream os, WidthSupplier width, AnsiMode mode,\r\n-                            AnsiProcessor processor, AnsiType type, AnsiColors colors,\r\n-                            Charset cs, IoRunnable installer, IoRunnable uninstaller, boolean resetAtUninstall) {\r\n-        super(os);\r\n-        this.width = width;\r\n-        this.processor = processor;\r\n-        this.type = type;\r\n-        this.colors = colors;\r\n-        this.installer = installer;\r\n-        this.uninstaller = uninstaller;\r\n-        this.resetAtUninstall = resetAtUninstall;\r\n-        this.cs = cs;\r\n-        setMode(mode);\r\n-    }\r\n-\r\n-    public int getTerminalWidth() {\r\n-        return width.getTerminalWidth();\r\n-    }\r\n-\r\n-    public AnsiType getType() {\r\n-        return type;\r\n-    }\r\n-\r\n-    public AnsiColors getColors() {\r\n-        return colors;\r\n-    }\r\n-\r\n-    public AnsiMode getMode() {\r\n-        return mode;\r\n-    }\r\n-\r\n-    public void setMode(AnsiMode mode) {\r\n-        ap = mode == AnsiMode.Strip\r\n-                ? new AnsiProcessor(out)\r\n-                : mode == AnsiMode.Force || processor == null ? new ColorsAnsiProcessor(out, colors) : processor;\r\n-        this.mode = mode;\r\n-    }\r\n-\r\n-    public boolean isResetAtUninstall() {\r\n-        return resetAtUninstall;\r\n-    }\r\n-\r\n-    public void setResetAtUninstall(boolean resetAtUninstall) {\r\n-        this.resetAtUninstall = resetAtUninstall;\r\n-    }\r\n-\r\n-    /**\r\n-     * {@inheritDoc}\r\n-     */\r\n-    @Override\r\n-    public void write(int data) throws IOException {\r\n-        switch (state) {\r\n-            case LOOKING_FOR_FIRST_ESC_CHAR:\r\n-                if (data == FIRST_ESC_CHAR) {\r\n-                    buffer[pos++] = (byte) data;\r\n-                    state = LOOKING_FOR_SECOND_ESC_CHAR;\r\n-                } else {\r\n-                    out.write(data);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_SECOND_ESC_CHAR:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (data == SECOND_ESC_CHAR) {\r\n-                    state = LOOKING_FOR_NEXT_ARG;\r\n-                } else if (data == SECOND_OSC_CHAR) {\r\n-                    state = LOOKING_FOR_OSC_COMMAND;\r\n-                } else if (data == SECOND_CHARSET0_CHAR) {\r\n-                    options.add(0);\r\n-                    state = LOOKING_FOR_CHARSET;\r\n-                } else if (data == SECOND_CHARSET1_CHAR) {\r\n-                    options.add(1);\r\n-                    state = LOOKING_FOR_CHARSET;\r\n-                } else {\r\n-                    reset(false);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_NEXT_ARG:\r\n-                buffer[pos++] = (byte) data;\r\n-                if ('\"' == data) {\r\n-                    startOfValue = pos - 1;\r\n-                    state = LOOKING_FOR_STR_ARG_END;\r\n-                } else if ('0' <= data && data <= '9') {\r\n-                    startOfValue = pos - 1;\r\n-                    state = LOOKING_FOR_INT_ARG_END;\r\n-                } else if (';' == data) {\r\n-                    options.add(null);\r\n-                } else if ('?' == data) {\r\n-                    options.add('?');\r\n-                } else if ('=' == data) {\r\n-                    options.add('=');\r\n-                } else {\r\n-                    processEscapeCommand(data);\r\n-                }\r\n-                break;\r\n-            default:\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_INT_ARG_END:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (!('0' <= data && data <= '9')) {\r\n-                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\r\n-                    Integer value = Integer.valueOf(strValue);\r\n-                    options.add(value);\r\n-                    if (data == ';') {\r\n-                        state = LOOKING_FOR_NEXT_ARG;\r\n-                    } else {\r\n-                        processEscapeCommand(data);\r\n-                    }\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_STR_ARG_END:\r\n-                buffer[pos++] = (byte) data;\r\n-                if ('\"' != data) {\r\n-                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\r\n-                    options.add(value);\r\n-                    if (data == ';') {\r\n-                        state = LOOKING_FOR_NEXT_ARG;\r\n-                    } else {\r\n-                        processEscapeCommand(data);\r\n-                    }\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_OSC_COMMAND:\r\n-                buffer[pos++] = (byte) data;\r\n-                if ('0' <= data && data <= '9') {\r\n-                    startOfValue = pos - 1;\r\n-                    state = LOOKING_FOR_OSC_COMMAND_END;\r\n-                } else {\r\n-                    reset(false);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_OSC_COMMAND_END:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (';' == data) {\r\n-                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\r\n-                    Integer value = Integer.valueOf(strValue);\r\n-                    options.add(value);\r\n-                    startOfValue = pos;\r\n-                    state = LOOKING_FOR_OSC_PARAM;\r\n-                } else if ('0' <= data && data <= '9') {\r\n-                    // already pushed digit to buffer, just keep looking\r\n-                } else {\r\n-                    // oops, did not expect this\r\n-                    reset(false);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_OSC_PARAM:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (BEL == data) {\r\n-                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\r\n-                    options.add(value);\r\n-                    processOperatingSystemCommand();\r\n-                } else if (FIRST_ESC_CHAR == data) {\r\n-                    state = LOOKING_FOR_ST;\r\n-                } else {\r\n-                    // just keep looking while adding text\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_ST:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (SECOND_ST_CHAR == data) {\r\n-                    String value = new String(buffer, startOfValue, (pos - 2) - startOfValue, cs);\r\n-                    options.add(value);\r\n-                    processOperatingSystemCommand();\r\n-                } else {\r\n-                    state = LOOKING_FOR_OSC_PARAM;\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_CHARSET:\r\n-                options.add((char) data);\r\n-                processCharsetSelect();\r\n-                break;\r\n-        }\r\n-\r\n-        // Is it just too long?\r\n-        if (pos >= buffer.length) {\r\n-            reset(false);\r\n-        }\r\n-    }\r\n-\r\n-    private void processCharsetSelect() throws IOException {\r\n-        try {\r\n-            reset(ap != null && ap.processCharsetSelect(options));\r\n-        } catch (RuntimeException e) {\r\n-            reset(true);\r\n-            throw e;\r\n-        }\r\n-    }\r\n-\r\n-    private void processOperatingSystemCommand() throws IOException {\r\n-        try {\r\n-            reset(ap != null && ap.processOperatingSystemCommand(options));\r\n-        } catch (RuntimeException e) {\r\n-            reset(true);\r\n-            throw e;\r\n-        }\r\n-    }\r\n-\r\n-    private void processEscapeCommand(int data) throws IOException {\r\n-        try {\r\n-            reset(ap != null && ap.processEscapeCommand(options, data));\r\n-        } catch (RuntimeException e) {\r\n-            reset(true);\r\n-            throw e;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Resets all state to continue with regular parsing\r\n-     * @param skipBuffer if current buffer should be skipped or written to out\r\n-     * @throws IOException\r\n-     */\r\n-    private void reset(boolean skipBuffer) throws IOException {\r\n-        if (!skipBuffer) {\r\n-            out.write(buffer, 0, pos);\r\n-        }\r\n-        pos = 0;\r\n-        startOfValue = 0;\r\n-        options.clear();\r\n-        state = LOOKING_FOR_FIRST_ESC_CHAR;\r\n-    }\r\n-\r\n-    public void install() throws IOException {\r\n-        if (installer != null) {\r\n-            installer.run();\r\n-        }\r\n-    }\r\n-\r\n-    public void uninstall() throws IOException {\r\n-        if (resetAtUninstall\r\n-                && type != AnsiType.Redirected\r\n-                && type != AnsiType.Unsupported) {\r\n-            setMode(AnsiMode.Default);\r\n-            write(RESET_CODE);\r\n-            flush();\r\n-        }\r\n-        if (uninstaller != null) {\r\n-            uninstaller.run();\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    public void close() throws IOException {\r\n-        uninstall();\r\n-        super.close();\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2020 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.FilterOutputStream;\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.nio.charset.Charset;\n+import java.util.ArrayList;\n+\n+import org.fusesource.jansi.AnsiColors;\n+import org.fusesource.jansi.AnsiMode;\n+import org.fusesource.jansi.AnsiType;\n+\n+/**\n+ * A ANSI print stream extracts ANSI escape codes written to \n+ * an output stream and calls corresponding <code>AnsiProcessor.process*</code> methods.\n+ * This particular class is not synchronized for improved performances.\n+ *\n+ * <p>For more information about ANSI escape codes, see\n+ * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\n+ *\n+ * @author Guillaume Nodet\n+ * @since 1.0\n+ * @see AnsiProcessor\n+ */\n+public class AnsiOutputStream extends FilterOutputStream {\n+\n+    public static final byte[] RESET_CODE = \"\\033[0m\".getBytes();\n+\n+    public interface IoRunnable {\n+        void run() throws IOException;\n+    }\n+\n+    public interface WidthSupplier {\n+        int getTerminalWidth();\n+    }\n+\n+    public static class ZeroWidthSupplier implements WidthSupplier {\n+        @Override\n+        public int getTerminalWidth() {\n+            return 0;\n+        }\n+    }\n+\n+    private static final int LOOKING_FOR_FIRST_ESC_CHAR = 0;\n+    private static final int LOOKING_FOR_SECOND_ESC_CHAR = 1;\n+    private static final int LOOKING_FOR_NEXT_ARG = 2;\n+    private static final int LOOKING_FOR_STR_ARG_END = 3;\n+    private static final int LOOKING_FOR_INT_ARG_END = 4;\n+    private static final int LOOKING_FOR_OSC_COMMAND = 5;\n+    private static final int LOOKING_FOR_OSC_COMMAND_END = 6;\n+    private static final int LOOKING_FOR_OSC_PARAM = 7;\n+    private static final int LOOKING_FOR_ST = 8;\n+    private static final int LOOKING_FOR_CHARSET = 9;\n+\n+    private static final int FIRST_ESC_CHAR = 27;\n+    private static final int SECOND_ESC_CHAR = '[';\n+    private static final int SECOND_OSC_CHAR = ']';\n+    private static final int BEL = 7;\n+    private static final int SECOND_ST_CHAR = '\\\\';\n+    private static final int SECOND_CHARSET0_CHAR = '(';\n+    private static final int SECOND_CHARSET1_CHAR = ')';\n+\n+    private AnsiProcessor ap;\n+    private final static int MAX_ESCAPE_SEQUENCE_LENGTH = 100;\n+    private final byte[] buffer = new byte[MAX_ESCAPE_SEQUENCE_LENGTH];\n+    private int pos = 0;\n+    private int startOfValue;\n+    private final ArrayList<Object> options = new ArrayList<Object>();\n+    private int state = LOOKING_FOR_FIRST_ESC_CHAR;\n+    private final Charset cs;\n+\n+    private final WidthSupplier width;\n+    private final AnsiProcessor processor;\n+    private final AnsiType type;\n+    private final AnsiColors colors;\n+    private final IoRunnable installer;\n+    private final IoRunnable uninstaller;\n+    private AnsiMode mode;\n+    private boolean resetAtUninstall;\n+\n+    public AnsiOutputStream(OutputStream os, WidthSupplier width, AnsiMode mode,\n+                            AnsiProcessor processor, AnsiType type, AnsiColors colors,\n+                            Charset cs, IoRunnable installer, IoRunnable uninstaller, boolean resetAtUninstall) {\n+        super(os);\n+        this.width = width;\n+        this.processor = processor;\n+        this.type = type;\n+        this.colors = colors;\n+        this.installer = installer;\n+        this.uninstaller = uninstaller;\n+        this.resetAtUninstall = resetAtUninstall;\n+        this.cs = cs;\n+        setMode(mode);\n+    }\n+\n+    public int getTerminalWidth() {\n+        return width.getTerminalWidth();\n+    }\n+\n+    public AnsiType getType() {\n+        return type;\n+    }\n+\n+    public AnsiColors getColors() {\n+        return colors;\n+    }\n+\n+    public AnsiMode getMode() {\n+        return mode;\n+    }\n+\n+    public void setMode(AnsiMode mode) {\n+        ap = mode == AnsiMode.Strip\n+                ? new AnsiProcessor(out)\n+                : mode == AnsiMode.Force || processor == null ? new ColorsAnsiProcessor(out, colors) : processor;\n+        this.mode = mode;\n+    }\n+\n+    public boolean isResetAtUninstall() {\n+        return resetAtUninstall;\n+    }\n+\n+    public void setResetAtUninstall(boolean resetAtUninstall) {\n+        this.resetAtUninstall = resetAtUninstall;\n+    }\n+\n+    /**\n+     * {@inheritDoc}\n+     */\n+    @Override\n+    public void write(int data) throws IOException {\n+        switch (state) {\n+            case LOOKING_FOR_FIRST_ESC_CHAR:\n+                if (data == FIRST_ESC_CHAR) {\n+                    buffer[pos++] = (byte) data;\n+                    state = LOOKING_FOR_SECOND_ESC_CHAR;\n+                } else {\n+                    out.write(data);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_SECOND_ESC_CHAR:\n+                buffer[pos++] = (byte) data;\n+                if (data == SECOND_ESC_CHAR) {\n+                    state = LOOKING_FOR_NEXT_ARG;\n+                } else if (data == SECOND_OSC_CHAR) {\n+                    state = LOOKING_FOR_OSC_COMMAND;\n+                } else if (data == SECOND_CHARSET0_CHAR) {\n+                    options.add(0);\n+                    state = LOOKING_FOR_CHARSET;\n+                } else if (data == SECOND_CHARSET1_CHAR) {\n+                    options.add(1);\n+                    state = LOOKING_FOR_CHARSET;\n+                } else {\n+                    reset(false);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_NEXT_ARG:\n+                buffer[pos++] = (byte) data;\n+                if ('\"' == data) {\n+                    startOfValue = pos - 1;\n+                    state = LOOKING_FOR_STR_ARG_END;\n+                } else if ('0' <= data && data <= '9') {\n+                    startOfValue = pos - 1;\n+                    state = LOOKING_FOR_INT_ARG_END;\n+                } else if (';' == data) {\n+                    options.add(null);\n+                } else if ('?' == data) {\n+                    options.add('?');\n+                } else if ('=' == data) {\n+                    options.add('=');\n+                } else {\n+                    processEscapeCommand(data);\n+                }\n+                break;\n+            default:\n+                break;\n+\n+            case LOOKING_FOR_INT_ARG_END:\n+                buffer[pos++] = (byte) data;\n+                if (!('0' <= data && data <= '9')) {\n+                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\n+                    Integer value = Integer.valueOf(strValue);\n+                    options.add(value);\n+                    if (data == ';') {\n+                        state = LOOKING_FOR_NEXT_ARG;\n+                    } else {\n+                        processEscapeCommand(data);\n+                    }\n+                }\n+                break;\n+\n+            case LOOKING_FOR_STR_ARG_END:\n+                buffer[pos++] = (byte) data;\n+                if ('\"' != data) {\n+                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\n+                    options.add(value);\n+                    if (data == ';') {\n+                        state = LOOKING_FOR_NEXT_ARG;\n+                    } else {\n+                        processEscapeCommand(data);\n+                    }\n+                }\n+                break;\n+\n+            case LOOKING_FOR_OSC_COMMAND:\n+                buffer[pos++] = (byte) data;\n+                if ('0' <= data && data <= '9') {\n+                    startOfValue = pos - 1;\n+                    state = LOOKING_FOR_OSC_COMMAND_END;\n+                } else {\n+                    reset(false);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_OSC_COMMAND_END:\n+                buffer[pos++] = (byte) data;\n+                if (';' == data) {\n+                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\n+                    Integer value = Integer.valueOf(strValue);\n+                    options.add(value);\n+                    startOfValue = pos;\n+                    state = LOOKING_FOR_OSC_PARAM;\n+                } else if ('0' <= data && data <= '9') {\n+                    // already pushed digit to buffer, just keep looking\n+                } else {\n+                    // oops, did not expect this\n+                    reset(false);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_OSC_PARAM:\n+                buffer[pos++] = (byte) data;\n+                if (BEL == data) {\n+                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\n+                    options.add(value);\n+                    processOperatingSystemCommand();\n+                } else if (FIRST_ESC_CHAR == data) {\n+                    state = LOOKING_FOR_ST;\n+                } else {\n+                    // just keep looking while adding text\n+                }\n+                break;\n+\n+            case LOOKING_FOR_ST:\n+                buffer[pos++] = (byte) data;\n+                if (SECOND_ST_CHAR == data) {\n+                    String value = new String(buffer, startOfValue, (pos - 2) - startOfValue, cs);\n+                    options.add(value);\n+                    processOperatingSystemCommand();\n+                } else {\n+                    state = LOOKING_FOR_OSC_PARAM;\n+                }\n+                break;\n+\n+            case LOOKING_FOR_CHARSET:\n+                options.add((char) data);\n+                processCharsetSelect();\n+                break;\n+        }\n+\n+        // Is it just too long?\n+        if (pos >= buffer.length) {\n+            reset(false);\n+        }\n+    }\n+\n+    private void processCharsetSelect() throws IOException {\n+        try {\n+            reset(ap != null && ap.processCharsetSelect(options));\n+        } catch (RuntimeException e) {\n+            reset(true);\n+            throw e;\n+        }\n+    }\n+\n+    private void processOperatingSystemCommand() throws IOException {\n+        try {\n+            reset(ap != null && ap.processOperatingSystemCommand(options));\n+        } catch (RuntimeException e) {\n+            reset(true);\n+            throw e;\n+        }\n+    }\n+\n+    private void processEscapeCommand(int data) throws IOException {\n+        try {\n+            reset(ap != null && ap.processEscapeCommand(options, data));\n+        } catch (RuntimeException e) {\n+            reset(true);\n+            throw e;\n+        }\n+    }\n+\n+    /**\n+     * Resets all state to continue with regular parsing\n+     * @param skipBuffer if current buffer should be skipped or written to out\n+     * @throws IOException\n+     */\n+    private void reset(boolean skipBuffer) throws IOException {\n+        if (!skipBuffer) {\n+            out.write(buffer, 0, pos);\n+        }\n+        pos = 0;\n+        startOfValue = 0;\n+        options.clear();\n+        state = LOOKING_FOR_FIRST_ESC_CHAR;\n+    }\n+\n+    public void install() throws IOException {\n+        if (installer != null) {\n+            installer.run();\n+        }\n+    }\n+\n+    public void uninstall() throws IOException {\n+        if (resetAtUninstall\n+                && type != AnsiType.Redirected\n+                && type != AnsiType.Unsupported) {\n+            setMode(AnsiMode.Default);\n+            write(RESET_CODE);\n+            flush();\n+        }\n+        if (uninstaller != null) {\n+            uninstaller.run();\n+        }\n+    }\n+\n+    @Override\n+    public void close() throws IOException {\n+        uninstall();\n+        super.close();\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/io/AnsiProcessor.java", "source2": "org/fusesource/jansi/io/AnsiProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,598 +1,598 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.util.ArrayList;\r\n-import java.util.Iterator;\r\n-\r\n-/**\r\n- * ANSI processor providing <code>process*</code> corresponding to ANSI escape codes. \r\n- * This class methods implementations are empty: subclasses should actually perform the\r\n- * ANSI escape behaviors by implementing active code in <code>process*</code> methods.\r\n- * \r\n- * <p>For more information about ANSI escape codes, see\r\n- * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\r\n- *\r\n- * @since 1.19\r\n- */\r\n-@SuppressWarnings(\"unused\")\r\n-public class AnsiProcessor {\r\n-    protected final OutputStream os;\r\n-\r\n-    public AnsiProcessor(OutputStream os) {\r\n-        this.os = os;\r\n-    }\r\n-\r\n-    /**\r\n-     * Helper for processEscapeCommand() to iterate over integer options\r\n-     * @param  optionsIterator  the underlying iterator\r\n-     * @throws IOException      if no more non-null values left\r\n-     */\r\n-    protected int getNextOptionInt(Iterator<Object> optionsIterator) throws IOException {\r\n-        for (;;) {\r\n-            if (!optionsIterator.hasNext())\r\n-                throw new IllegalArgumentException();\r\n-            Object arg = optionsIterator.next();\r\n-            if (arg != null)\r\n-                return (Integer) arg;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * @return true if the escape command was processed.\r\n-     */\r\n-    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\r\n-        try {\r\n-            switch (command) {\r\n-                case 'A':\r\n-                    processCursorUp(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'B':\r\n-                    processCursorDown(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'C':\r\n-                    processCursorRight(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'D':\r\n-                    processCursorLeft(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'E':\r\n-                    processCursorDownLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'F':\r\n-                    processCursorUpLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'G':\r\n-                    processCursorToColumn(optionInt(options, 0));\r\n-                    return true;\r\n-                case 'H':\r\n-                case 'f':\r\n-                    processCursorTo(optionInt(options, 0, 1), optionInt(options, 1, 1));\r\n-                    return true;\r\n-                case 'J':\r\n-                    processEraseScreen(optionInt(options, 0, 0));\r\n-                    return true;\r\n-                case 'K':\r\n-                    processEraseLine(optionInt(options, 0, 0));\r\n-                    return true;\r\n-                case 'L':\r\n-                    processInsertLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'M':\r\n-                    processDeleteLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'S':\r\n-                    processScrollUp(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'T':\r\n-                    processScrollDown(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'm':\r\n-                    // Validate all options are ints...\r\n-                    for (Object next : options) {\r\n-                        if (next != null && next.getClass() != Integer.class) {\r\n-                            throw new IllegalArgumentException();\r\n-                        }\r\n-                    }\r\n-\r\n-                    int count = 0;\r\n-                    Iterator<Object> optionsIterator = options.iterator();\r\n-                    while (optionsIterator.hasNext()) {\r\n-                        Object next = optionsIterator.next();\r\n-                        if (next != null) {\r\n-                            count++;\r\n-                            int value = (Integer) next;\r\n-                            if (30 <= value && value <= 37) {\r\n-                                processSetForegroundColor(value - 30);\r\n-                            } else if (40 <= value && value <= 47) {\r\n-                                processSetBackgroundColor(value - 40);\r\n-                            } else if (90 <= value && value <= 97) {\r\n-                                processSetForegroundColor(value - 90, true);\r\n-                            } else if (100 <= value && value <= 107) {\r\n-                                processSetBackgroundColor(value - 100, true);\r\n-                            } else if (value == 38 || value == 48) {\r\n-                                if (!optionsIterator.hasNext()) {\r\n-                                    continue;\r\n-                                }\r\n-                                // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\r\n-                                int arg2or5 = getNextOptionInt(optionsIterator);\r\n-                                if (arg2or5 == 2) {\r\n-                                    // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\r\n-                                    int r = getNextOptionInt(optionsIterator);\r\n-                                    int g = getNextOptionInt(optionsIterator);\r\n-                                    int b = getNextOptionInt(optionsIterator);\r\n-                                    if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) {\r\n-                                        if (value == 38)\r\n-                                            processSetForegroundColorExt(r, g, b);\r\n-                                        else\r\n-                                            processSetBackgroundColorExt(r, g, b);\r\n-                                    } else {\r\n-                                        throw new IllegalArgumentException();\r\n-                                    }\r\n-                                }\r\n-                                else if (arg2or5 == 5) {\r\n-                                    // 256 color style like `esc[38;5;<index>m`\r\n-                                    int paletteIndex = getNextOptionInt(optionsIterator);\r\n-                                    if (paletteIndex >= 0 && paletteIndex <= 255) {\r\n-                                        if (value == 38)\r\n-                                            processSetForegroundColorExt(paletteIndex);\r\n-                                        else\r\n-                                            processSetBackgroundColorExt(paletteIndex);\r\n-                                    } else {\r\n-                                        throw new IllegalArgumentException();\r\n-                                    }\r\n-                                }\r\n-                                else {\r\n-                                    throw new IllegalArgumentException();\r\n-                                }\r\n-                            } else {\r\n-                                switch (value) {\r\n-                                    case 39:\r\n-                                        processDefaultTextColor();\r\n-                                        break;\r\n-                                    case 49:\r\n-                                        processDefaultBackgroundColor();\r\n-                                        break;\r\n-                                    case 0:\r\n-                                        processAttributeReset();\r\n-                                        break;\r\n-                                    default:\r\n-                                        processSetAttribute(value);\r\n-                                }\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                    if (count == 0) {\r\n-                        processAttributeReset();\r\n-                    }\r\n-                    return true;\r\n-                case 's':\r\n-                    processSaveCursorPosition();\r\n-                    return true;\r\n-                case 'u':\r\n-                    processRestoreCursorPosition();\r\n-                    return true;\r\n-\r\n-                default:\r\n-                    if ('a' <= command && command <= 'z') {\r\n-                        processUnknownExtension(options, command);\r\n-                        return true;\r\n-                    }\r\n-                    if ('A' <= command && command <= 'Z') {\r\n-                        processUnknownExtension(options, command);\r\n-                        return true;\r\n-                    }\r\n-                    return false;\r\n-            }\r\n-        } catch (IllegalArgumentException ignore) {\r\n-        }\r\n-        return false;\r\n-    }\r\n-\r\n-    /**\r\n-     * @return true if the operating system command was processed.\r\n-     */\r\n-    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\r\n-        int command = optionInt(options, 0);\r\n-        String label = (String) options.get(1);\r\n-        // for command > 2 label could be composed (i.e. contain ';'), but we'll leave\r\n-        // it to processUnknownOperatingSystemCommand implementations to handle that\r\n-        try {\r\n-            switch (command) {\r\n-                case 0:\r\n-                    processChangeIconNameAndWindowTitle(label);\r\n-                    return true;\r\n-                case 1:\r\n-                    processChangeIconName(label);\r\n-                    return true;\r\n-                case 2:\r\n-                    processChangeWindowTitle(label);\r\n-                    return true;\r\n-\r\n-                default:\r\n-                    // not exactly unknown, but not supported through dedicated process methods:\r\n-                    processUnknownOperatingSystemCommand(command, label);\r\n-                    return true;\r\n-            }\r\n-        } catch (IllegalArgumentException ignore) {\r\n-        }\r\n-        return false;\r\n-    }\r\n-\r\n-    /**\r\n-     * Process character set sequence.\r\n-     * @param options options\r\n-     * @return true if the charcter set select command was processed.\r\n-     */\r\n-    protected boolean processCharsetSelect(ArrayList<Object> options) {\r\n-        int set = optionInt(options, 0);\r\n-        char seq = (Character) options.get(1);\r\n-        processCharsetSelect(set, seq);\r\n-        return true;\r\n-    }\r\n-\r\n-    private int optionInt(ArrayList<Object> options, int index) {\r\n-        if (options.size() <= index)\r\n-            throw new IllegalArgumentException();\r\n-        Object value = options.get(index);\r\n-        if (value == null)\r\n-            throw new IllegalArgumentException();\r\n-        if (!value.getClass().equals(Integer.class))\r\n-            throw new IllegalArgumentException();\r\n-        return (Integer) value;\r\n-    }\r\n-\r\n-    private int optionInt(ArrayList<Object> options, int index, int defaultValue) {\r\n-        if (options.size() > index) {\r\n-            Object value = options.get(index);\r\n-            if (value == null) {\r\n-                return defaultValue;\r\n-            }\r\n-            return (Integer) value;\r\n-        }\r\n-        return defaultValue;\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI u</code> ANSI code, corresponding to <code>RCP \u2013 Restore Cursor Position</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processRestoreCursorPosition() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI s</code> ANSI code, corresponding to <code>SCP \u2013 Save Cursor Position</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSaveCursorPosition() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI L</code> ANSI code, corresponding to <code>IL \u2013 Insert Line</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     * @since 1.16\r\n-     */\r\n-    protected void processInsertLine(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI M</code> ANSI code, corresponding to <code>DL \u2013 Delete Line</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     * @since 1.16\r\n-     */\r\n-    protected void processDeleteLine(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI n T</code> ANSI code, corresponding to <code>SD \u2013 Scroll Down</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processScrollDown(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI n U</code> ANSI code, corresponding to <code>SU \u2013 Scroll Up</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processScrollUp(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int ERASE_SCREEN_TO_END = 0;\r\n-    protected static final int ERASE_SCREEN_TO_BEGINING = 1;\r\n-    protected static final int ERASE_SCREEN = 2;\r\n-\r\n-    /**\r\n-     * Process <code>CSI n J</code> ANSI code, corresponding to <code>ED \u2013 Erase in Display</code>\r\n-     * @param eraseOption eraseOption\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processEraseScreen(int eraseOption) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int ERASE_LINE_TO_END = 0;\r\n-    protected static final int ERASE_LINE_TO_BEGINING = 1;\r\n-    protected static final int ERASE_LINE = 2;\r\n-\r\n-    /**\r\n-     * Process <code>CSI n K</code> ANSI code, corresponding to <code>ED \u2013 Erase in Line</code>\r\n-     * @param eraseOption eraseOption\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processEraseLine(int eraseOption) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int ATTRIBUTE_INTENSITY_BOLD = 1; // \tIntensity: Bold\r\n-    protected static final int ATTRIBUTE_INTENSITY_FAINT = 2; // \tIntensity; Faint \tnot widely supported\r\n-    protected static final int ATTRIBUTE_ITALIC = 3; // \tItalic; on \tnot widely supported. Sometimes treated as inverse.\r\n-    protected static final int ATTRIBUTE_UNDERLINE = 4; // \tUnderline; Single\r\n-    protected static final int ATTRIBUTE_BLINK_SLOW = 5; // \tBlink; Slow \tless than 150 per minute\r\n-    protected static final int ATTRIBUTE_BLINK_FAST = 6; // \tBlink; Rapid \tMS-DOS ANSI.SYS; 150 per minute or more\r\n-    protected static final int ATTRIBUTE_NEGATIVE_ON = 7; // \tImage; Negative \tinverse or reverse; swap foreground and background\r\n-    protected static final int ATTRIBUTE_CONCEAL_ON = 8; // \tConceal on\r\n-    protected static final int ATTRIBUTE_UNDERLINE_DOUBLE = 21; // \tUnderline; Double \tnot widely supported\r\n-    protected static final int ATTRIBUTE_INTENSITY_NORMAL = 22; // \tIntensity; Normal \tnot bold and not faint\r\n-    protected static final int ATTRIBUTE_UNDERLINE_OFF = 24; // \tUnderline; None\r\n-    protected static final int ATTRIBUTE_BLINK_OFF = 25; // \tBlink; off\r\n-    protected static final int ATTRIBUTE_NEGATIVE_OFF = 27; // \tImage; Positive\r\n-    protected static final int ATTRIBUTE_CONCEAL_OFF = 28; // \tReveal \tconceal off\r\n-\r\n-    /**\r\n-     * process <code>SGR</code> other than <code>0</code> (reset), <code>30-39</code> (foreground),\r\n-     * <code>40-49</code> (background), <code>90-97</code> (foreground high intensity) or\r\n-     * <code>100-107</code> (background high intensity)\r\n-     * @param attribute attribute\r\n-     * @throws IOException IOException\r\n-     * @see #processAttributeReset()\r\n-     * @see #processSetForegroundColor(int)\r\n-     * @see #processSetForegroundColor(int, boolean)\r\n-     * @see #processSetForegroundColorExt(int)\r\n-     * @see #processSetForegroundColorExt(int, int, int)\r\n-     * @see #processDefaultTextColor()\r\n-     * @see #processDefaultBackgroundColor()\r\n-     */\r\n-    protected void processSetAttribute(int attribute) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int BLACK = 0;\r\n-    protected static final int RED = 1;\r\n-    protected static final int GREEN = 2;\r\n-    protected static final int YELLOW = 3;\r\n-    protected static final int BLUE = 4;\r\n-    protected static final int MAGENTA = 5;\r\n-    protected static final int CYAN = 6;\r\n-    protected static final int WHITE = 7;\r\n-\r\n-    /**\r\n-     * process <code>SGR 30-37</code> corresponding to <code>Set text color (foreground)</code>.\r\n-     * @param color the text color\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColor(int color) throws IOException {\r\n-        processSetForegroundColor(color, false);\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 30-37</code> or <code>SGR 90-97</code> corresponding to\r\n-     * <code>Set text color (foreground)</code> either in normal mode or high intensity.\r\n-     * @param color the text color\r\n-     * @param bright is high intensity?\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\r\n-     * with a palette of 255 colors.\r\n-     * @param paletteIndex the text color in the palette\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\r\n-     * with a 24 bits RGB definition of the color.\r\n-     * @param r red\r\n-     * @param g green\r\n-     * @param b blue\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 40-47</code> corresponding to <code>Set background color</code>.\r\n-     * @param color the background color\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColor(int color) throws IOException {\r\n-        processSetBackgroundColor(color, false);\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 40-47</code> or <code>SGR 100-107</code> corresponding to\r\n-     * <code>Set background color</code> either in normal mode or high intensity.\r\n-     * @param color the background color\r\n-     * @param bright is high intensity?\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\r\n-     * with a palette of 255 colors.\r\n-     * @param paletteIndex the background color in the palette\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\r\n-     * with a 24 bits RGB definition of the color.\r\n-     * @param r red\r\n-     * @param g green\r\n-     * @param b blue\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 39</code> corresponding to <code>Default text color (foreground)</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processDefaultTextColor() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 49</code> corresponding to <code>Default background color</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processDefaultBackgroundColor() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 0</code> corresponding to <code>Reset / Normal</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processAttributeReset() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n ; m H</code> corresponding to <code>CUP \u2013 Cursor Position</code> or\r\n-     * <code>CSI n ; m f</code> corresponding to <code>HVP \u2013 Horizontal and Vertical Position</code>\r\n-     * @param row row\r\n-     * @param col col\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorTo(int row, int col) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n G</code> corresponding to <code>CHA \u2013 Cursor Horizontal Absolute</code>\r\n-     * @param x the column\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorToColumn(int x) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n F</code> corresponding to <code>CPL \u2013 Cursor Previous Line</code>\r\n-     * @param count line count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorUpLine(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n E</code> corresponding to <code>CNL \u2013 Cursor Next Line</code>\r\n-     * @param count line count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorDownLine(int count) throws IOException {\r\n-        // Poor mans impl..\r\n-        for (int i = 0; i < count; i++) {\r\n-            os.write('\\n');\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n D</code> corresponding to <code>CUB \u2013 Cursor Back</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorLeft(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n C</code> corresponding to <code>CUF \u2013 Cursor Forward</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorRight(int count) throws IOException {\r\n-        // Poor mans impl..\r\n-        for (int i = 0; i < count; i++) {\r\n-            os.write(' ');\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n B</code> corresponding to <code>CUD \u2013 Cursor Down</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorDown(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n A</code> corresponding to <code>CUU \u2013 Cursor Up</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorUp(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process Unknown Extension\r\n-     * @param options options\r\n-     * @param command command\r\n-     */\r\n-    protected void processUnknownExtension(ArrayList<Object> options, int command) {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>OSC 0;text BEL</code> corresponding to <code>Change Window and Icon label</code>\r\n-     * @param label window title name\r\n-     */\r\n-    protected void processChangeIconNameAndWindowTitle(String label) {\r\n-        processChangeIconName(label);\r\n-        processChangeWindowTitle(label);\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>OSC 1;text BEL</code> corresponding to <code>Change Icon label</code>\r\n-     * @param label icon label\r\n-     */\r\n-    protected void processChangeIconName(String label) {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>OSC 2;text BEL</code> corresponding to <code>Change Window title</code>\r\n-     * @param label window title text\r\n-     */\r\n-    protected void processChangeWindowTitle(String label) {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process unknown <code>OSC</code> command.\r\n-     * @param command command\r\n-     * @param param param\r\n-     */\r\n-    protected void processUnknownOperatingSystemCommand(int command, String param) {\r\n-    }\r\n-\r\n-    protected void processCharsetSelect(int set, char seq) {\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.util.ArrayList;\n+import java.util.Iterator;\n+\n+/**\n+ * ANSI processor providing <code>process*</code> corresponding to ANSI escape codes. \n+ * This class methods implementations are empty: subclasses should actually perform the\n+ * ANSI escape behaviors by implementing active code in <code>process*</code> methods.\n+ * \n+ * <p>For more information about ANSI escape codes, see\n+ * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\n+ *\n+ * @since 1.19\n+ */\n+@SuppressWarnings(\"unused\")\n+public class AnsiProcessor {\n+    protected final OutputStream os;\n+\n+    public AnsiProcessor(OutputStream os) {\n+        this.os = os;\n+    }\n+\n+    /**\n+     * Helper for processEscapeCommand() to iterate over integer options\n+     * @param  optionsIterator  the underlying iterator\n+     * @throws IOException      if no more non-null values left\n+     */\n+    protected int getNextOptionInt(Iterator<Object> optionsIterator) throws IOException {\n+        for (;;) {\n+            if (!optionsIterator.hasNext())\n+                throw new IllegalArgumentException();\n+            Object arg = optionsIterator.next();\n+            if (arg != null)\n+                return (Integer) arg;\n+        }\n+    }\n+\n+    /**\n+     * @return true if the escape command was processed.\n+     */\n+    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\n+        try {\n+            switch (command) {\n+                case 'A':\n+                    processCursorUp(optionInt(options, 0, 1));\n+                    return true;\n+                case 'B':\n+                    processCursorDown(optionInt(options, 0, 1));\n+                    return true;\n+                case 'C':\n+                    processCursorRight(optionInt(options, 0, 1));\n+                    return true;\n+                case 'D':\n+                    processCursorLeft(optionInt(options, 0, 1));\n+                    return true;\n+                case 'E':\n+                    processCursorDownLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'F':\n+                    processCursorUpLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'G':\n+                    processCursorToColumn(optionInt(options, 0));\n+                    return true;\n+                case 'H':\n+                case 'f':\n+                    processCursorTo(optionInt(options, 0, 1), optionInt(options, 1, 1));\n+                    return true;\n+                case 'J':\n+                    processEraseScreen(optionInt(options, 0, 0));\n+                    return true;\n+                case 'K':\n+                    processEraseLine(optionInt(options, 0, 0));\n+                    return true;\n+                case 'L':\n+                    processInsertLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'M':\n+                    processDeleteLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'S':\n+                    processScrollUp(optionInt(options, 0, 1));\n+                    return true;\n+                case 'T':\n+                    processScrollDown(optionInt(options, 0, 1));\n+                    return true;\n+                case 'm':\n+                    // Validate all options are ints...\n+                    for (Object next : options) {\n+                        if (next != null && next.getClass() != Integer.class) {\n+                            throw new IllegalArgumentException();\n+                        }\n+                    }\n+\n+                    int count = 0;\n+                    Iterator<Object> optionsIterator = options.iterator();\n+                    while (optionsIterator.hasNext()) {\n+                        Object next = optionsIterator.next();\n+                        if (next != null) {\n+                            count++;\n+                            int value = (Integer) next;\n+                            if (30 <= value && value <= 37) {\n+                                processSetForegroundColor(value - 30);\n+                            } else if (40 <= value && value <= 47) {\n+                                processSetBackgroundColor(value - 40);\n+                            } else if (90 <= value && value <= 97) {\n+                                processSetForegroundColor(value - 90, true);\n+                            } else if (100 <= value && value <= 107) {\n+                                processSetBackgroundColor(value - 100, true);\n+                            } else if (value == 38 || value == 48) {\n+                                if (!optionsIterator.hasNext()) {\n+                                    continue;\n+                                }\n+                                // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\n+                                int arg2or5 = getNextOptionInt(optionsIterator);\n+                                if (arg2or5 == 2) {\n+                                    // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\n+                                    int r = getNextOptionInt(optionsIterator);\n+                                    int g = getNextOptionInt(optionsIterator);\n+                                    int b = getNextOptionInt(optionsIterator);\n+                                    if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) {\n+                                        if (value == 38)\n+                                            processSetForegroundColorExt(r, g, b);\n+                                        else\n+                                            processSetBackgroundColorExt(r, g, b);\n+                                    } else {\n+                                        throw new IllegalArgumentException();\n+                                    }\n+                                }\n+                                else if (arg2or5 == 5) {\n+                                    // 256 color style like `esc[38;5;<index>m`\n+                                    int paletteIndex = getNextOptionInt(optionsIterator);\n+                                    if (paletteIndex >= 0 && paletteIndex <= 255) {\n+                                        if (value == 38)\n+                                            processSetForegroundColorExt(paletteIndex);\n+                                        else\n+                                            processSetBackgroundColorExt(paletteIndex);\n+                                    } else {\n+                                        throw new IllegalArgumentException();\n+                                    }\n+                                }\n+                                else {\n+                                    throw new IllegalArgumentException();\n+                                }\n+                            } else {\n+                                switch (value) {\n+                                    case 39:\n+                                        processDefaultTextColor();\n+                                        break;\n+                                    case 49:\n+                                        processDefaultBackgroundColor();\n+                                        break;\n+                                    case 0:\n+                                        processAttributeReset();\n+                                        break;\n+                                    default:\n+                                        processSetAttribute(value);\n+                                }\n+                            }\n+                        }\n+                    }\n+                    if (count == 0) {\n+                        processAttributeReset();\n+                    }\n+                    return true;\n+                case 's':\n+                    processSaveCursorPosition();\n+                    return true;\n+                case 'u':\n+                    processRestoreCursorPosition();\n+                    return true;\n+\n+                default:\n+                    if ('a' <= command && command <= 'z') {\n+                        processUnknownExtension(options, command);\n+                        return true;\n+                    }\n+                    if ('A' <= command && command <= 'Z') {\n+                        processUnknownExtension(options, command);\n+                        return true;\n+                    }\n+                    return false;\n+            }\n+        } catch (IllegalArgumentException ignore) {\n+        }\n+        return false;\n+    }\n+\n+    /**\n+     * @return true if the operating system command was processed.\n+     */\n+    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\n+        int command = optionInt(options, 0);\n+        String label = (String) options.get(1);\n+        // for command > 2 label could be composed (i.e. contain ';'), but we'll leave\n+        // it to processUnknownOperatingSystemCommand implementations to handle that\n+        try {\n+            switch (command) {\n+                case 0:\n+                    processChangeIconNameAndWindowTitle(label);\n+                    return true;\n+                case 1:\n+                    processChangeIconName(label);\n+                    return true;\n+                case 2:\n+                    processChangeWindowTitle(label);\n+                    return true;\n+\n+                default:\n+                    // not exactly unknown, but not supported through dedicated process methods:\n+                    processUnknownOperatingSystemCommand(command, label);\n+                    return true;\n+            }\n+        } catch (IllegalArgumentException ignore) {\n+        }\n+        return false;\n+    }\n+\n+    /**\n+     * Process character set sequence.\n+     * @param options options\n+     * @return true if the charcter set select command was processed.\n+     */\n+    protected boolean processCharsetSelect(ArrayList<Object> options) {\n+        int set = optionInt(options, 0);\n+        char seq = (Character) options.get(1);\n+        processCharsetSelect(set, seq);\n+        return true;\n+    }\n+\n+    private int optionInt(ArrayList<Object> options, int index) {\n+        if (options.size() <= index)\n+            throw new IllegalArgumentException();\n+        Object value = options.get(index);\n+        if (value == null)\n+            throw new IllegalArgumentException();\n+        if (!value.getClass().equals(Integer.class))\n+            throw new IllegalArgumentException();\n+        return (Integer) value;\n+    }\n+\n+    private int optionInt(ArrayList<Object> options, int index, int defaultValue) {\n+        if (options.size() > index) {\n+            Object value = options.get(index);\n+            if (value == null) {\n+                return defaultValue;\n+            }\n+            return (Integer) value;\n+        }\n+        return defaultValue;\n+    }\n+\n+    /**\n+     * Process <code>CSI u</code> ANSI code, corresponding to <code>RCP \u2013 Restore Cursor Position</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processRestoreCursorPosition() throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI s</code> ANSI code, corresponding to <code>SCP \u2013 Save Cursor Position</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processSaveCursorPosition() throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI L</code> ANSI code, corresponding to <code>IL \u2013 Insert Line</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     * @since 1.16\n+     */\n+    protected void processInsertLine(int optionInt) throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI M</code> ANSI code, corresponding to <code>DL \u2013 Delete Line</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     * @since 1.16\n+     */\n+    protected void processDeleteLine(int optionInt) throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI n T</code> ANSI code, corresponding to <code>SD \u2013 Scroll Down</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     */\n+    protected void processScrollDown(int optionInt) throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI n U</code> ANSI code, corresponding to <code>SU \u2013 Scroll Up</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     */\n+    protected void processScrollUp(int optionInt) throws IOException {\n+    }\n+\n+    protected static final int ERASE_SCREEN_TO_END = 0;\n+    protected static final int ERASE_SCREEN_TO_BEGINING = 1;\n+    protected static final int ERASE_SCREEN = 2;\n+\n+    /**\n+     * Process <code>CSI n J</code> ANSI code, corresponding to <code>ED \u2013 Erase in Display</code>\n+     * @param eraseOption eraseOption\n+     * @throws IOException IOException\n+     */\n+    protected void processEraseScreen(int eraseOption) throws IOException {\n+    }\n+\n+    protected static final int ERASE_LINE_TO_END = 0;\n+    protected static final int ERASE_LINE_TO_BEGINING = 1;\n+    protected static final int ERASE_LINE = 2;\n+\n+    /**\n+     * Process <code>CSI n K</code> ANSI code, corresponding to <code>ED \u2013 Erase in Line</code>\n+     * @param eraseOption eraseOption\n+     * @throws IOException IOException\n+     */\n+    protected void processEraseLine(int eraseOption) throws IOException {\n+    }\n+\n+    protected static final int ATTRIBUTE_INTENSITY_BOLD = 1; // \tIntensity: Bold\n+    protected static final int ATTRIBUTE_INTENSITY_FAINT = 2; // \tIntensity; Faint \tnot widely supported\n+    protected static final int ATTRIBUTE_ITALIC = 3; // \tItalic; on \tnot widely supported. Sometimes treated as inverse.\n+    protected static final int ATTRIBUTE_UNDERLINE = 4; // \tUnderline; Single\n+    protected static final int ATTRIBUTE_BLINK_SLOW = 5; // \tBlink; Slow \tless than 150 per minute\n+    protected static final int ATTRIBUTE_BLINK_FAST = 6; // \tBlink; Rapid \tMS-DOS ANSI.SYS; 150 per minute or more\n+    protected static final int ATTRIBUTE_NEGATIVE_ON = 7; // \tImage; Negative \tinverse or reverse; swap foreground and background\n+    protected static final int ATTRIBUTE_CONCEAL_ON = 8; // \tConceal on\n+    protected static final int ATTRIBUTE_UNDERLINE_DOUBLE = 21; // \tUnderline; Double \tnot widely supported\n+    protected static final int ATTRIBUTE_INTENSITY_NORMAL = 22; // \tIntensity; Normal \tnot bold and not faint\n+    protected static final int ATTRIBUTE_UNDERLINE_OFF = 24; // \tUnderline; None\n+    protected static final int ATTRIBUTE_BLINK_OFF = 25; // \tBlink; off\n+    protected static final int ATTRIBUTE_NEGATIVE_OFF = 27; // \tImage; Positive\n+    protected static final int ATTRIBUTE_CONCEAL_OFF = 28; // \tReveal \tconceal off\n+\n+    /**\n+     * process <code>SGR</code> other than <code>0</code> (reset), <code>30-39</code> (foreground),\n+     * <code>40-49</code> (background), <code>90-97</code> (foreground high intensity) or\n+     * <code>100-107</code> (background high intensity)\n+     * @param attribute attribute\n+     * @throws IOException IOException\n+     * @see #processAttributeReset()\n+     * @see #processSetForegroundColor(int)\n+     * @see #processSetForegroundColor(int, boolean)\n+     * @see #processSetForegroundColorExt(int)\n+     * @see #processSetForegroundColorExt(int, int, int)\n+     * @see #processDefaultTextColor()\n+     * @see #processDefaultBackgroundColor()\n+     */\n+    protected void processSetAttribute(int attribute) throws IOException {\n+    }\n+\n+    protected static final int BLACK = 0;\n+    protected static final int RED = 1;\n+    protected static final int GREEN = 2;\n+    protected static final int YELLOW = 3;\n+    protected static final int BLUE = 4;\n+    protected static final int MAGENTA = 5;\n+    protected static final int CYAN = 6;\n+    protected static final int WHITE = 7;\n+\n+    /**\n+     * process <code>SGR 30-37</code> corresponding to <code>Set text color (foreground)</code>.\n+     * @param color the text color\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColor(int color) throws IOException {\n+        processSetForegroundColor(color, false);\n+    }\n+\n+    /**\n+     * process <code>SGR 30-37</code> or <code>SGR 90-97</code> corresponding to\n+     * <code>Set text color (foreground)</code> either in normal mode or high intensity.\n+     * @param color the text color\n+     * @param bright is high intensity?\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\n+     * with a palette of 255 colors.\n+     * @param paletteIndex the text color in the palette\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\n+     * with a 24 bits RGB definition of the color.\n+     * @param r red\n+     * @param g green\n+     * @param b blue\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 40-47</code> corresponding to <code>Set background color</code>.\n+     * @param color the background color\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColor(int color) throws IOException {\n+        processSetBackgroundColor(color, false);\n+    }\n+\n+    /**\n+     * process <code>SGR 40-47</code> or <code>SGR 100-107</code> corresponding to\n+     * <code>Set background color</code> either in normal mode or high intensity.\n+     * @param color the background color\n+     * @param bright is high intensity?\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\n+     * with a palette of 255 colors.\n+     * @param paletteIndex the background color in the palette\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\n+     * with a 24 bits RGB definition of the color.\n+     * @param r red\n+     * @param g green\n+     * @param b blue\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 39</code> corresponding to <code>Default text color (foreground)</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processDefaultTextColor() throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 49</code> corresponding to <code>Default background color</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processDefaultBackgroundColor() throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 0</code> corresponding to <code>Reset / Normal</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processAttributeReset() throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n ; m H</code> corresponding to <code>CUP \u2013 Cursor Position</code> or\n+     * <code>CSI n ; m f</code> corresponding to <code>HVP \u2013 Horizontal and Vertical Position</code>\n+     * @param row row\n+     * @param col col\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorTo(int row, int col) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n G</code> corresponding to <code>CHA \u2013 Cursor Horizontal Absolute</code>\n+     * @param x the column\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorToColumn(int x) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n F</code> corresponding to <code>CPL \u2013 Cursor Previous Line</code>\n+     * @param count line count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorUpLine(int count) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n E</code> corresponding to <code>CNL \u2013 Cursor Next Line</code>\n+     * @param count line count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorDownLine(int count) throws IOException {\n+        // Poor mans impl..\n+        for (int i = 0; i < count; i++) {\n+            os.write('\\n');\n+        }\n+    }\n+\n+    /**\n+     * process <code>CSI n D</code> corresponding to <code>CUB \u2013 Cursor Back</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorLeft(int count) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n C</code> corresponding to <code>CUF \u2013 Cursor Forward</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorRight(int count) throws IOException {\n+        // Poor mans impl..\n+        for (int i = 0; i < count; i++) {\n+            os.write(' ');\n+        }\n+    }\n+\n+    /**\n+     * process <code>CSI n B</code> corresponding to <code>CUD \u2013 Cursor Down</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorDown(int count) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n A</code> corresponding to <code>CUU \u2013 Cursor Up</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorUp(int count) throws IOException {\n+    }\n+\n+    /**\n+     * Process Unknown Extension\n+     * @param options options\n+     * @param command command\n+     */\n+    protected void processUnknownExtension(ArrayList<Object> options, int command) {\n+    }\n+\n+    /**\n+     * process <code>OSC 0;text BEL</code> corresponding to <code>Change Window and Icon label</code>\n+     * @param label window title name\n+     */\n+    protected void processChangeIconNameAndWindowTitle(String label) {\n+        processChangeIconName(label);\n+        processChangeWindowTitle(label);\n+    }\n+\n+    /**\n+     * process <code>OSC 1;text BEL</code> corresponding to <code>Change Icon label</code>\n+     * @param label icon label\n+     */\n+    protected void processChangeIconName(String label) {\n+    }\n+\n+    /**\n+     * process <code>OSC 2;text BEL</code> corresponding to <code>Change Window title</code>\n+     * @param label window title text\n+     */\n+    protected void processChangeWindowTitle(String label) {\n+    }\n+\n+    /**\n+     * Process unknown <code>OSC</code> command.\n+     * @param command command\n+     * @param param param\n+     */\n+    protected void processUnknownOperatingSystemCommand(int command, String param) {\n+    }\n+\n+    protected void processCharsetSelect(int set, char seq) {\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/io/Colors.java", "source2": "org/fusesource/jansi/io/Colors.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,160 +1,160 @@\n-/*\r\n- * Copyright (c) 2002-2018, the original author or authors.\r\n- *\r\n- * This software is distributable under the BSD license. See the terms of the\r\n- * BSD license in the documentation provided with this software.\r\n- *\r\n- * https://opensource.org/licenses/BSD-3-Clause\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-/**\r\n- * Helper class for dealing with color rounding.\r\n- * This is a simplified version of the JLine's one at\r\n- *   https://github.com/jline/jline3/blob/a24636dc5de83baa6b65049e8215fb372433b3b1/terminal/src/main/java/org/jline/utils/Colors.java\r\n- */\r\n-public class Colors {\r\n-\r\n-    /**\r\n-     * Default 256 colors palette\r\n-     */\r\n-    public static final int[] DEFAULT_COLORS_256 = {\r\n-            // 16 ansi\r\n-            0x000000, 0x800000, 0x008000, 0x808000, 0x000080, 0x800080, 0x008080, 0xc0c0c0,\r\n-            0x808080, 0xff0000, 0x00ff00, 0xffff00, 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff,\r\n-\r\n-            // 6x6x6 color cube\r\n-            0x000000, 0x00005f, 0x000087, 0x0000af, 0x0000d7, 0x0000ff,\r\n-            0x005f00, 0x005f5f, 0x005f87, 0x005faf, 0x005fd7, 0x005fff,\r\n-            0x008700, 0x00875f, 0x008787, 0x0087af, 0x0087d7, 0x0087ff,\r\n-            0x00af00, 0x00af5f, 0x00af87, 0x00afaf, 0x00afd7, 0x00afff,\r\n-            0x00d700, 0x00d75f, 0x00d787, 0x00d7af, 0x00d7d7, 0x00d7ff,\r\n-            0x00ff00, 0x00ff5f, 0x00ff87, 0x00ffaf, 0x00ffd7, 0x00ffff,\r\n-\r\n-            0x5f0000, 0x5f005f, 0x5f0087, 0x5f00af, 0x5f00d7, 0x5f00ff,\r\n-            0x5f5f00, 0x5f5f5f, 0x5f5f87, 0x5f5faf, 0x5f5fd7, 0x5f5fff,\r\n-            0x5f8700, 0x5f875f, 0x5f8787, 0x5f87af, 0x5f87d7, 0x5f87ff,\r\n-            0x5faf00, 0x5faf5f, 0x5faf87, 0x5fafaf, 0x5fafd7, 0x5fafff,\r\n-            0x5fd700, 0x5fd75f, 0x5fd787, 0x5fd7af, 0x5fd7d7, 0x5fd7ff,\r\n-            0x5fff00, 0x5fff5f, 0x5fff87, 0x5fffaf, 0x5fffd7, 0x5fffff,\r\n-\r\n-            0x870000, 0x87005f, 0x870087, 0x8700af, 0x8700d7, 0x8700ff,\r\n-            0x875f00, 0x875f5f, 0x875f87, 0x875faf, 0x875fd7, 0x875fff,\r\n-            0x878700, 0x87875f, 0x878787, 0x8787af, 0x8787d7, 0x8787ff,\r\n-            0x87af00, 0x87af5f, 0x87af87, 0x87afaf, 0x87afd7, 0x87afff,\r\n-            0x87d700, 0x87d75f, 0x87d787, 0x87d7af, 0x87d7d7, 0x87d7ff,\r\n-            0x87ff00, 0x87ff5f, 0x87ff87, 0x87ffaf, 0x87ffd7, 0x87ffff,\r\n-\r\n-            0xaf0000, 0xaf005f, 0xaf0087, 0xaf00af, 0xaf00d7, 0xaf00ff,\r\n-            0xaf5f00, 0xaf5f5f, 0xaf5f87, 0xaf5faf, 0xaf5fd7, 0xaf5fff,\r\n-            0xaf8700, 0xaf875f, 0xaf8787, 0xaf87af, 0xaf87d7, 0xaf87ff,\r\n-            0xafaf00, 0xafaf5f, 0xafaf87, 0xafafaf, 0xafafd7, 0xafafff,\r\n-            0xafd700, 0xafd75f, 0xafd787, 0xafd7af, 0xafd7d7, 0xafd7ff,\r\n-            0xafff00, 0xafff5f, 0xafff87, 0xafffaf, 0xafffd7, 0xafffff,\r\n-\r\n-            0xd70000, 0xd7005f, 0xd70087, 0xd700af, 0xd700d7, 0xd700ff,\r\n-            0xd75f00, 0xd75f5f, 0xd75f87, 0xd75faf, 0xd75fd7, 0xd75fff,\r\n-            0xd78700, 0xd7875f, 0xd78787, 0xd787af, 0xd787d7, 0xd787ff,\r\n-            0xd7af00, 0xd7af5f, 0xd7af87, 0xd7afaf, 0xd7afd7, 0xd7afff,\r\n-            0xd7d700, 0xd7d75f, 0xd7d787, 0xd7d7af, 0xd7d7d7, 0xd7d7ff,\r\n-            0xd7ff00, 0xd7ff5f, 0xd7ff87, 0xd7ffaf, 0xd7ffd7, 0xd7ffff,\r\n-\r\n-            0xff0000, 0xff005f, 0xff0087, 0xff00af, 0xff00d7, 0xff00ff,\r\n-            0xff5f00, 0xff5f5f, 0xff5f87, 0xff5faf, 0xff5fd7, 0xff5fff,\r\n-            0xff8700, 0xff875f, 0xff8787, 0xff87af, 0xff87d7, 0xff87ff,\r\n-            0xffaf00, 0xffaf5f, 0xffaf87, 0xffafaf, 0xffafd7, 0xffafff,\r\n-            0xffd700, 0xffd75f, 0xffd787, 0xffd7af, 0xffd7d7, 0xffd7ff,\r\n-            0xffff00, 0xffff5f, 0xffff87, 0xffffaf, 0xffffd7, 0xffffff,\r\n-\r\n-            // 24 grey ramp\r\n-            0x080808, 0x121212, 0x1c1c1c, 0x262626, 0x303030, 0x3a3a3a, 0x444444, 0x4e4e4e,\r\n-            0x585858, 0x626262, 0x6c6c6c, 0x767676, 0x808080, 0x8a8a8a, 0x949494, 0x9e9e9e,\r\n-            0xa8a8a8, 0xb2b2b2, 0xbcbcbc, 0xc6c6c6, 0xd0d0d0, 0xdadada, 0xe4e4e4, 0xeeeeee,\r\n-    };\r\n-\r\n-    public static int roundColor(int col, int max) {\r\n-        if (col >= max) {\r\n-            int c = DEFAULT_COLORS_256[col];\r\n-            col = roundColor(c, DEFAULT_COLORS_256, max);\r\n-        }\r\n-        return col;\r\n-    }\r\n-\r\n-    public static int roundRgbColor(int r, int g, int b, int max) {\r\n-        return roundColor((r << 16) + (g << 8) + b, DEFAULT_COLORS_256, max);\r\n-    }\r\n-\r\n-    private static int roundColor(int color, int[] colors, int max) {\r\n-        double best_distance = Integer.MAX_VALUE;\r\n-        int best_index = Integer.MAX_VALUE;\r\n-        for (int idx = 0; idx < max; idx++) {\r\n-            double d = cie76(color, colors[idx]);\r\n-            if (d <= best_distance) {\r\n-                best_index = idx;\r\n-                best_distance = d;\r\n-            }\r\n-        }\r\n-        return best_index;\r\n-    }\r\n-\r\n-    private static double cie76(int c1, int c2) {\r\n-        return scalar(rgb2cielab(c1), rgb2cielab(c2));\r\n-    }\r\n-\r\n-    private static double scalar(double[] c1, double[] c2) {\r\n-        return sqr(c1[0] - c2[0])\r\n-             + sqr(c1[1] - c2[1])\r\n-             + sqr(c1[2] - c2[2]);\r\n-    }\r\n-\r\n-    private static double[] rgb(int color) {\r\n-        int r = (color >> 16) & 0xFF;\r\n-        int g = (color >>  8) & 0xFF;\r\n-        int b = (color >>  0) & 0xFF;\r\n-        return new double[] { r / 255.0, g / 255.0, b / 255.0 };\r\n-    }\r\n-\r\n-    private static double[] rgb2cielab(int color) {\r\n-        return rgb2cielab(rgb(color));\r\n-    }\r\n-\r\n-    private static double[] rgb2cielab(double[] rgb) {\r\n-        return xyz2lab(rgb2xyz(rgb));\r\n-    }\r\n-\r\n-    private static double[] rgb2xyz(double[] rgb) {\r\n-        double vr = pivotRgb(rgb[0]);\r\n-        double vg = pivotRgb(rgb[1]);\r\n-        double vb = pivotRgb(rgb[2]);\r\n-        // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\n-        double x = vr * 0.4124564 + vg * 0.3575761 + vb * 0.1804375;\r\n-        double y = vr * 0.2126729 + vg * 0.7151522 + vb * 0.0721750;\r\n-        double z = vr * 0.0193339 + vg * 0.1191920 + vb * 0.9503041;\r\n-        return new double[] { x, y, z };\r\n-    }\r\n-\r\n-    private static double pivotRgb(double n) {\r\n-        return n > 0.04045 ? Math.pow((n + 0.055) / 1.055, 2.4) : n / 12.92;\r\n-    }\r\n-\r\n-    private static double[] xyz2lab(double[] xyz) {\r\n-        double fx = pivotXyz(xyz[0]);\r\n-        double fy = pivotXyz(xyz[1]);\r\n-        double fz = pivotXyz(xyz[2]);\r\n-        double l = 116.0 * fy - 16.0;\r\n-        double a = 500.0 * (fx - fy);\r\n-        double b = 200.0 * (fy - fz);\r\n-        return new double[] { l, a, b };\r\n-    }\r\n-\r\n-    private static final double epsilon = 216.0 / 24389.0;\r\n-    private static final double kappa = 24389.0 / 27.0;\r\n-    private static double pivotXyz(double n) {\r\n-        return n > epsilon ? Math.cbrt(n) : (kappa * n + 16) / 116;\r\n-    }\r\n-\r\n-    private static double sqr(double n) {\r\n-        return n * n;\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (c) 2002-2018, the original author or authors.\n+ *\n+ * This software is distributable under the BSD license. See the terms of the\n+ * BSD license in the documentation provided with this software.\n+ *\n+ * https://opensource.org/licenses/BSD-3-Clause\n+ */\n+package org.fusesource.jansi.io;\n+\n+/**\n+ * Helper class for dealing with color rounding.\n+ * This is a simplified version of the JLine's one at\n+ *   https://github.com/jline/jline3/blob/a24636dc5de83baa6b65049e8215fb372433b3b1/terminal/src/main/java/org/jline/utils/Colors.java\n+ */\n+public class Colors {\n+\n+    /**\n+     * Default 256 colors palette\n+     */\n+    public static final int[] DEFAULT_COLORS_256 = {\n+            // 16 ansi\n+            0x000000, 0x800000, 0x008000, 0x808000, 0x000080, 0x800080, 0x008080, 0xc0c0c0,\n+            0x808080, 0xff0000, 0x00ff00, 0xffff00, 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff,\n+\n+            // 6x6x6 color cube\n+            0x000000, 0x00005f, 0x000087, 0x0000af, 0x0000d7, 0x0000ff,\n+            0x005f00, 0x005f5f, 0x005f87, 0x005faf, 0x005fd7, 0x005fff,\n+            0x008700, 0x00875f, 0x008787, 0x0087af, 0x0087d7, 0x0087ff,\n+            0x00af00, 0x00af5f, 0x00af87, 0x00afaf, 0x00afd7, 0x00afff,\n+            0x00d700, 0x00d75f, 0x00d787, 0x00d7af, 0x00d7d7, 0x00d7ff,\n+            0x00ff00, 0x00ff5f, 0x00ff87, 0x00ffaf, 0x00ffd7, 0x00ffff,\n+\n+            0x5f0000, 0x5f005f, 0x5f0087, 0x5f00af, 0x5f00d7, 0x5f00ff,\n+            0x5f5f00, 0x5f5f5f, 0x5f5f87, 0x5f5faf, 0x5f5fd7, 0x5f5fff,\n+            0x5f8700, 0x5f875f, 0x5f8787, 0x5f87af, 0x5f87d7, 0x5f87ff,\n+            0x5faf00, 0x5faf5f, 0x5faf87, 0x5fafaf, 0x5fafd7, 0x5fafff,\n+            0x5fd700, 0x5fd75f, 0x5fd787, 0x5fd7af, 0x5fd7d7, 0x5fd7ff,\n+            0x5fff00, 0x5fff5f, 0x5fff87, 0x5fffaf, 0x5fffd7, 0x5fffff,\n+\n+            0x870000, 0x87005f, 0x870087, 0x8700af, 0x8700d7, 0x8700ff,\n+            0x875f00, 0x875f5f, 0x875f87, 0x875faf, 0x875fd7, 0x875fff,\n+            0x878700, 0x87875f, 0x878787, 0x8787af, 0x8787d7, 0x8787ff,\n+            0x87af00, 0x87af5f, 0x87af87, 0x87afaf, 0x87afd7, 0x87afff,\n+            0x87d700, 0x87d75f, 0x87d787, 0x87d7af, 0x87d7d7, 0x87d7ff,\n+            0x87ff00, 0x87ff5f, 0x87ff87, 0x87ffaf, 0x87ffd7, 0x87ffff,\n+\n+            0xaf0000, 0xaf005f, 0xaf0087, 0xaf00af, 0xaf00d7, 0xaf00ff,\n+            0xaf5f00, 0xaf5f5f, 0xaf5f87, 0xaf5faf, 0xaf5fd7, 0xaf5fff,\n+            0xaf8700, 0xaf875f, 0xaf8787, 0xaf87af, 0xaf87d7, 0xaf87ff,\n+            0xafaf00, 0xafaf5f, 0xafaf87, 0xafafaf, 0xafafd7, 0xafafff,\n+            0xafd700, 0xafd75f, 0xafd787, 0xafd7af, 0xafd7d7, 0xafd7ff,\n+            0xafff00, 0xafff5f, 0xafff87, 0xafffaf, 0xafffd7, 0xafffff,\n+\n+            0xd70000, 0xd7005f, 0xd70087, 0xd700af, 0xd700d7, 0xd700ff,\n+            0xd75f00, 0xd75f5f, 0xd75f87, 0xd75faf, 0xd75fd7, 0xd75fff,\n+            0xd78700, 0xd7875f, 0xd78787, 0xd787af, 0xd787d7, 0xd787ff,\n+            0xd7af00, 0xd7af5f, 0xd7af87, 0xd7afaf, 0xd7afd7, 0xd7afff,\n+            0xd7d700, 0xd7d75f, 0xd7d787, 0xd7d7af, 0xd7d7d7, 0xd7d7ff,\n+            0xd7ff00, 0xd7ff5f, 0xd7ff87, 0xd7ffaf, 0xd7ffd7, 0xd7ffff,\n+\n+            0xff0000, 0xff005f, 0xff0087, 0xff00af, 0xff00d7, 0xff00ff,\n+            0xff5f00, 0xff5f5f, 0xff5f87, 0xff5faf, 0xff5fd7, 0xff5fff,\n+            0xff8700, 0xff875f, 0xff8787, 0xff87af, 0xff87d7, 0xff87ff,\n+            0xffaf00, 0xffaf5f, 0xffaf87, 0xffafaf, 0xffafd7, 0xffafff,\n+            0xffd700, 0xffd75f, 0xffd787, 0xffd7af, 0xffd7d7, 0xffd7ff,\n+            0xffff00, 0xffff5f, 0xffff87, 0xffffaf, 0xffffd7, 0xffffff,\n+\n+            // 24 grey ramp\n+            0x080808, 0x121212, 0x1c1c1c, 0x262626, 0x303030, 0x3a3a3a, 0x444444, 0x4e4e4e,\n+            0x585858, 0x626262, 0x6c6c6c, 0x767676, 0x808080, 0x8a8a8a, 0x949494, 0x9e9e9e,\n+            0xa8a8a8, 0xb2b2b2, 0xbcbcbc, 0xc6c6c6, 0xd0d0d0, 0xdadada, 0xe4e4e4, 0xeeeeee,\n+    };\n+\n+    public static int roundColor(int col, int max) {\n+        if (col >= max) {\n+            int c = DEFAULT_COLORS_256[col];\n+            col = roundColor(c, DEFAULT_COLORS_256, max);\n+        }\n+        return col;\n+    }\n+\n+    public static int roundRgbColor(int r, int g, int b, int max) {\n+        return roundColor((r << 16) + (g << 8) + b, DEFAULT_COLORS_256, max);\n+    }\n+\n+    private static int roundColor(int color, int[] colors, int max) {\n+        double best_distance = Integer.MAX_VALUE;\n+        int best_index = Integer.MAX_VALUE;\n+        for (int idx = 0; idx < max; idx++) {\n+            double d = cie76(color, colors[idx]);\n+            if (d <= best_distance) {\n+                best_index = idx;\n+                best_distance = d;\n+            }\n+        }\n+        return best_index;\n+    }\n+\n+    private static double cie76(int c1, int c2) {\n+        return scalar(rgb2cielab(c1), rgb2cielab(c2));\n+    }\n+\n+    private static double scalar(double[] c1, double[] c2) {\n+        return sqr(c1[0] - c2[0])\n+             + sqr(c1[1] - c2[1])\n+             + sqr(c1[2] - c2[2]);\n+    }\n+\n+    private static double[] rgb(int color) {\n+        int r = (color >> 16) & 0xFF;\n+        int g = (color >>  8) & 0xFF;\n+        int b = (color >>  0) & 0xFF;\n+        return new double[] { r / 255.0, g / 255.0, b / 255.0 };\n+    }\n+\n+    private static double[] rgb2cielab(int color) {\n+        return rgb2cielab(rgb(color));\n+    }\n+\n+    private static double[] rgb2cielab(double[] rgb) {\n+        return xyz2lab(rgb2xyz(rgb));\n+    }\n+\n+    private static double[] rgb2xyz(double[] rgb) {\n+        double vr = pivotRgb(rgb[0]);\n+        double vg = pivotRgb(rgb[1]);\n+        double vb = pivotRgb(rgb[2]);\n+        // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n+        double x = vr * 0.4124564 + vg * 0.3575761 + vb * 0.1804375;\n+        double y = vr * 0.2126729 + vg * 0.7151522 + vb * 0.0721750;\n+        double z = vr * 0.0193339 + vg * 0.1191920 + vb * 0.9503041;\n+        return new double[] { x, y, z };\n+    }\n+\n+    private static double pivotRgb(double n) {\n+        return n > 0.04045 ? Math.pow((n + 0.055) / 1.055, 2.4) : n / 12.92;\n+    }\n+\n+    private static double[] xyz2lab(double[] xyz) {\n+        double fx = pivotXyz(xyz[0]);\n+        double fy = pivotXyz(xyz[1]);\n+        double fz = pivotXyz(xyz[2]);\n+        double l = 116.0 * fy - 16.0;\n+        double a = 500.0 * (fx - fy);\n+        double b = 200.0 * (fy - fz);\n+        return new double[] { l, a, b };\n+    }\n+\n+    private static final double epsilon = 216.0 / 24389.0;\n+    private static final double kappa = 24389.0 / 27.0;\n+    private static double pivotXyz(double n) {\n+        return n > epsilon ? Math.cbrt(n) : (kappa * n + 16) / 116;\n+    }\n+\n+    private static double sqr(double n) {\n+        return n * n;\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/io/ColorsAnsiProcessor.java", "source2": "org/fusesource/jansi/io/ColorsAnsiProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,142 +1,142 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.util.ArrayList;\r\n-import java.util.Iterator;\r\n-\r\n-import org.fusesource.jansi.AnsiColors;\r\n-\r\n-/**\r\n- * Ansi processor to process color conversion if needed.\r\n- */\r\n-public class ColorsAnsiProcessor extends AnsiProcessor {\r\n-\r\n-    private final AnsiColors colors;\r\n-\r\n-    public ColorsAnsiProcessor(OutputStream os, AnsiColors colors) {\r\n-        super(os);\r\n-        this.colors = colors;\r\n-    }\r\n-\r\n-    @Override\r\n-    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\r\n-        if (command == 'm' && (colors == AnsiColors.Colors256 || colors == AnsiColors.Colors16)) {\r\n-            // Validate all options are ints...\r\n-            boolean has38or48 = false;\r\n-            for (Object next : options) {\r\n-                if (next != null && next.getClass() != Integer.class) {\r\n-                    throw new IllegalArgumentException();\r\n-                }\r\n-                Integer value = (Integer) next;\r\n-                has38or48 |= value == 38 || value == 48;\r\n-            }\r\n-            // SGR commands do not contain an extended color, so just transfer the buffer\r\n-            if (!has38or48) {\r\n-                return false;\r\n-            }\r\n-            StringBuilder sb = new StringBuilder(32);\r\n-            sb.append('\\033').append('[');\r\n-            boolean first = true;\r\n-            Iterator<Object> optionsIterator = options.iterator();\r\n-            while (optionsIterator.hasNext()) {\r\n-                Object next = optionsIterator.next();\r\n-                if (next != null) {\r\n-                    int value = (Integer) next;\r\n-                    if (value == 38 || value == 48) {\r\n-                        // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\r\n-                        int arg2or5 = getNextOptionInt(optionsIterator);\r\n-                        if (arg2or5 == 2) {\r\n-                            // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\r\n-                            int r = getNextOptionInt(optionsIterator);\r\n-                            int g = getNextOptionInt(optionsIterator);\r\n-                            int b = getNextOptionInt(optionsIterator);\r\n-                            if (colors == AnsiColors.Colors256) {\r\n-                                int col = Colors.roundRgbColor(r, g, b, 256);\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value);\r\n-                                sb.append(';');\r\n-                                sb.append(5);\r\n-                                sb.append(';');\r\n-                                sb.append(col);\r\n-                            } else {\r\n-                                int col = Colors.roundRgbColor(r, g, b, 16);\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\r\n-                            }\r\n-                        }\r\n-                        else if (arg2or5 == 5) {\r\n-                            // 256 color style like `esc[38;5;<index>m`\r\n-                            int paletteIndex = getNextOptionInt(optionsIterator);\r\n-                            if (colors == AnsiColors.Colors256) {\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value);\r\n-                                sb.append(';');\r\n-                                sb.append(5);\r\n-                                sb.append(';');\r\n-                                sb.append(paletteIndex);\r\n-                            } else {\r\n-                                int col = Colors.roundColor(paletteIndex, 16);\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\r\n-                            }\r\n-                        }\r\n-                        else {\r\n-                            throw new IllegalArgumentException();\r\n-                        }\r\n-                    } else {\r\n-                        if (!first) {\r\n-                            sb.append(';');\r\n-                        }\r\n-                        first = false;\r\n-                        sb.append(value);\r\n-                    }\r\n-                }\r\n-            }\r\n-            sb.append('m');\r\n-            os.write(sb.toString().getBytes());\r\n-            return true;\r\n-\r\n-        } else {\r\n-            return false;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\r\n-        return false;\r\n-    }\r\n-\r\n-    @Override\r\n-    protected boolean processCharsetSelect(ArrayList<Object> options) {\r\n-        return false;\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.util.ArrayList;\n+import java.util.Iterator;\n+\n+import org.fusesource.jansi.AnsiColors;\n+\n+/**\n+ * Ansi processor to process color conversion if needed.\n+ */\n+public class ColorsAnsiProcessor extends AnsiProcessor {\n+\n+    private final AnsiColors colors;\n+\n+    public ColorsAnsiProcessor(OutputStream os, AnsiColors colors) {\n+        super(os);\n+        this.colors = colors;\n+    }\n+\n+    @Override\n+    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\n+        if (command == 'm' && (colors == AnsiColors.Colors256 || colors == AnsiColors.Colors16)) {\n+            // Validate all options are ints...\n+            boolean has38or48 = false;\n+            for (Object next : options) {\n+                if (next != null && next.getClass() != Integer.class) {\n+                    throw new IllegalArgumentException();\n+                }\n+                Integer value = (Integer) next;\n+                has38or48 |= value == 38 || value == 48;\n+            }\n+            // SGR commands do not contain an extended color, so just transfer the buffer\n+            if (!has38or48) {\n+                return false;\n+            }\n+            StringBuilder sb = new StringBuilder(32);\n+            sb.append('\\033').append('[');\n+            boolean first = true;\n+            Iterator<Object> optionsIterator = options.iterator();\n+            while (optionsIterator.hasNext()) {\n+                Object next = optionsIterator.next();\n+                if (next != null) {\n+                    int value = (Integer) next;\n+                    if (value == 38 || value == 48) {\n+                        // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\n+                        int arg2or5 = getNextOptionInt(optionsIterator);\n+                        if (arg2or5 == 2) {\n+                            // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\n+                            int r = getNextOptionInt(optionsIterator);\n+                            int g = getNextOptionInt(optionsIterator);\n+                            int b = getNextOptionInt(optionsIterator);\n+                            if (colors == AnsiColors.Colors256) {\n+                                int col = Colors.roundRgbColor(r, g, b, 256);\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value);\n+                                sb.append(';');\n+                                sb.append(5);\n+                                sb.append(';');\n+                                sb.append(col);\n+                            } else {\n+                                int col = Colors.roundRgbColor(r, g, b, 16);\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\n+                            }\n+                        }\n+                        else if (arg2or5 == 5) {\n+                            // 256 color style like `esc[38;5;<index>m`\n+                            int paletteIndex = getNextOptionInt(optionsIterator);\n+                            if (colors == AnsiColors.Colors256) {\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value);\n+                                sb.append(';');\n+                                sb.append(5);\n+                                sb.append(';');\n+                                sb.append(paletteIndex);\n+                            } else {\n+                                int col = Colors.roundColor(paletteIndex, 16);\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\n+                            }\n+                        }\n+                        else {\n+                            throw new IllegalArgumentException();\n+                        }\n+                    } else {\n+                        if (!first) {\n+                            sb.append(';');\n+                        }\n+                        first = false;\n+                        sb.append(value);\n+                    }\n+                }\n+            }\n+            sb.append('m');\n+            os.write(sb.toString().getBytes());\n+            return true;\n+\n+        } else {\n+            return false;\n+        }\n+    }\n+\n+    @Override\n+    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\n+        return false;\n+    }\n+\n+    @Override\n+    protected boolean processCharsetSelect(ArrayList<Object> options) {\n+        return false;\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/io/FastBufferedOutputStream.java", "source2": "org/fusesource/jansi/io/FastBufferedOutputStream.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,69 +1,69 @@\n-/*\r\n- * Copyright (C) 2009-2020 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.FilterOutputStream;\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-\r\n-/**\r\n- * A simple buffering output stream with no synchronization.\r\n- */\r\n-public class FastBufferedOutputStream extends FilterOutputStream {\r\n-\r\n-    protected final byte buf[] = new byte[8192];\r\n-    protected int count;\r\n-\r\n-    public FastBufferedOutputStream(OutputStream out) {\r\n-        super(out);\r\n-    }\r\n-\r\n-    @Override\r\n-    public void write(int b) throws IOException {\r\n-        if (count >= buf.length) {\r\n-            flushBuffer();\r\n-        }\r\n-        buf[count++] = (byte) b;\r\n-    }\r\n-\r\n-    @Override\r\n-    public void write(byte b[], int off, int len) throws IOException {\r\n-        if (len >= buf.length) {\r\n-            flushBuffer();\r\n-            out.write(b, off, len);\r\n-            return;\r\n-        }\r\n-        if (len > buf.length - count) {\r\n-            flushBuffer();\r\n-        }\r\n-        System.arraycopy(b, off, buf, count, len);\r\n-        count += len;\r\n-    }\r\n-\r\n-    private void flushBuffer() throws IOException {\r\n-        if (count > 0) {\r\n-            out.write(buf, 0, count);\r\n-            count = 0;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    public void flush() throws IOException {\r\n-        flushBuffer();\r\n-        out.flush();\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2020 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.FilterOutputStream;\n+import java.io.IOException;\n+import java.io.OutputStream;\n+\n+/**\n+ * A simple buffering output stream with no synchronization.\n+ */\n+public class FastBufferedOutputStream extends FilterOutputStream {\n+\n+    protected final byte buf[] = new byte[8192];\n+    protected int count;\n+\n+    public FastBufferedOutputStream(OutputStream out) {\n+        super(out);\n+    }\n+\n+    @Override\n+    public void write(int b) throws IOException {\n+        if (count >= buf.length) {\n+            flushBuffer();\n+        }\n+        buf[count++] = (byte) b;\n+    }\n+\n+    @Override\n+    public void write(byte b[], int off, int len) throws IOException {\n+        if (len >= buf.length) {\n+            flushBuffer();\n+            out.write(b, off, len);\n+            return;\n+        }\n+        if (len > buf.length - count) {\n+            flushBuffer();\n+        }\n+        System.arraycopy(b, off, buf, count, len);\n+        count += len;\n+    }\n+\n+    private void flushBuffer() throws IOException {\n+        if (count > 0) {\n+            out.write(buf, 0, count);\n+            count = 0;\n+        }\n+    }\n+\n+    @Override\n+    public void flush() throws IOException {\n+        flushBuffer();\n+        out.flush();\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/io/WindowsAnsiProcessor.java", "source2": "org/fusesource/jansi/io/WindowsAnsiProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,426 +1,426 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_BLUE;\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_GREEN;\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_INTENSITY;\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_RED;\r\n-import static org.fusesource.jansi.internal.Kernel32.CHAR_INFO;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_BLUE;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_GREEN;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_INTENSITY;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_RED;\r\n-import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputAttribute;\r\n-import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputCharacterW;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\r\n-import static org.fusesource.jansi.internal.Kernel32.SMALL_RECT;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.ScrollConsoleScreenBuffer;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleCursorPosition;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleTextAttribute;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleTitle;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-\r\n-import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\r\n-import org.fusesource.jansi.internal.Kernel32.COORD;\r\n-import org.fusesource.jansi.WindowsSupport;\r\n-\r\n-/**\r\n- * A Windows ANSI escape processor, that uses JNA to access native platform\r\n- * API's to change the console attributes (see \r\n- * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/Kernel32.html\">Jansi native Kernel32</a>).\r\n- * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\r\n- * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\r\n- *\r\n- * @since 1.19\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @author Joris Kuipers\r\n- */\r\n-public final class WindowsAnsiProcessor extends AnsiProcessor {\r\n-\r\n-    private final long console;\r\n-\r\n-    private static final short FOREGROUND_BLACK = 0;\r\n-    private static final short FOREGROUND_YELLOW = (short) (FOREGROUND_RED | FOREGROUND_GREEN);\r\n-    private static final short FOREGROUND_MAGENTA = (short) (FOREGROUND_BLUE | FOREGROUND_RED);\r\n-    private static final short FOREGROUND_CYAN = (short) (FOREGROUND_BLUE | FOREGROUND_GREEN);\r\n-    private static final short FOREGROUND_WHITE = (short) (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\r\n-\r\n-    private static final short BACKGROUND_BLACK = 0;\r\n-    private static final short BACKGROUND_YELLOW = (short) (BACKGROUND_RED | BACKGROUND_GREEN);\r\n-    private static final short BACKGROUND_MAGENTA = (short) (BACKGROUND_BLUE | BACKGROUND_RED);\r\n-    private static final short BACKGROUND_CYAN = (short) (BACKGROUND_BLUE | BACKGROUND_GREEN);\r\n-    private static final short BACKGROUND_WHITE = (short) (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);\r\n-\r\n-    private static final short[] ANSI_FOREGROUND_COLOR_MAP = {\r\n-            FOREGROUND_BLACK,\r\n-            FOREGROUND_RED,\r\n-            FOREGROUND_GREEN,\r\n-            FOREGROUND_YELLOW,\r\n-            FOREGROUND_BLUE,\r\n-            FOREGROUND_MAGENTA,\r\n-            FOREGROUND_CYAN,\r\n-            FOREGROUND_WHITE,\r\n-    };\r\n-\r\n-    private static final short[] ANSI_BACKGROUND_COLOR_MAP = {\r\n-            BACKGROUND_BLACK,\r\n-            BACKGROUND_RED,\r\n-            BACKGROUND_GREEN,\r\n-            BACKGROUND_YELLOW,\r\n-            BACKGROUND_BLUE,\r\n-            BACKGROUND_MAGENTA,\r\n-            BACKGROUND_CYAN,\r\n-            BACKGROUND_WHITE,\r\n-    };\r\n-\r\n-    private final CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\r\n-    private final short originalColors;\r\n-\r\n-    private boolean negative;\r\n-    private short savedX = -1;\r\n-    private short savedY = -1;\r\n-\r\n-    public WindowsAnsiProcessor(OutputStream ps, long console) throws IOException {\r\n-        super(ps);\r\n-        this.console = console;\r\n-        getConsoleInfo();\r\n-        originalColors = info.attributes;\r\n-    }\r\n-\r\n-    public WindowsAnsiProcessor(OutputStream ps, boolean stdout) throws IOException {\r\n-        this(ps, GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE));\r\n-    }\r\n-\r\n-    public WindowsAnsiProcessor(OutputStream ps) throws IOException {\r\n-        this(ps, true);\r\n-    }\r\n-\r\n-    private void getConsoleInfo() throws IOException {\r\n-        os.flush();\r\n-        if (GetConsoleScreenBufferInfo(console, info) == 0) {\r\n-            throw new IOException(\"Could not get the screen info: \" + WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-        if (negative) {\r\n-            info.attributes = invertAttributeColors(info.attributes);\r\n-        }\r\n-    }\r\n-\r\n-    private void applyAttribute() throws IOException {\r\n-        os.flush();\r\n-        short attributes = info.attributes;\r\n-        if (negative) {\r\n-            attributes = invertAttributeColors(attributes);\r\n-        }\r\n-        if (SetConsoleTextAttribute(console, attributes) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    private short invertAttributeColors(short attributes) {\r\n-        // Swap the the Foreground and Background bits.\r\n-        int fg = 0x000F & attributes;\r\n-        fg <<= 4;\r\n-        int bg = 0X00F0 & attributes;\r\n-        bg >>= 4;\r\n-        attributes = (short) ((attributes & 0xFF00) | fg | bg);\r\n-        return attributes;\r\n-    }\r\n-\r\n-    private void applyCursorPosition() throws IOException {\r\n-        if (SetConsoleCursorPosition(console, info.cursorPosition.copy()) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processEraseScreen(int eraseOption) throws IOException {\r\n-        getConsoleInfo();\r\n-        int[] written = new int[1];\r\n-        switch (eraseOption) {\r\n-            case ERASE_SCREEN:\r\n-                COORD topLeft = new COORD();\r\n-                topLeft.x = 0;\r\n-                topLeft.y = info.window.top;\r\n-                int screenLength = info.window.height() * info.size.x;\r\n-                FillConsoleOutputAttribute(console, info.attributes, screenLength, topLeft, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', screenLength, topLeft, written);\r\n-                break;\r\n-            case ERASE_SCREEN_TO_BEGINING:\r\n-                COORD topLeft2 = new COORD();\r\n-                topLeft2.x = 0;\r\n-                topLeft2.y = info.window.top;\r\n-                int lengthToCursor = (info.cursorPosition.y - info.window.top) * info.size.x\r\n-                        + info.cursorPosition.x;\r\n-                FillConsoleOutputAttribute(console, info.attributes, lengthToCursor, topLeft2, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', lengthToCursor, topLeft2, written);\r\n-                break;\r\n-            case ERASE_SCREEN_TO_END:\r\n-                int lengthToEnd = (info.window.bottom - info.cursorPosition.y) * info.size.x +\r\n-                        (info.size.x - info.cursorPosition.x);\r\n-                FillConsoleOutputAttribute(console, info.attributes, lengthToEnd, info.cursorPosition.copy(), written);\r\n-                FillConsoleOutputCharacterW(console, ' ', lengthToEnd, info.cursorPosition.copy(), written);\r\n-                break;\r\n-            default:\r\n-                break;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processEraseLine(int eraseOption) throws IOException {\r\n-        getConsoleInfo();\r\n-        int[] written = new int[1];\r\n-        switch (eraseOption) {\r\n-            case ERASE_LINE:\r\n-                COORD leftColCurrRow = info.cursorPosition.copy();\r\n-                leftColCurrRow.x = 0;\r\n-                FillConsoleOutputAttribute(console, info.attributes, info.size.x, leftColCurrRow, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', info.size.x, leftColCurrRow, written);\r\n-                break;\r\n-            case ERASE_LINE_TO_BEGINING:\r\n-                COORD leftColCurrRow2 = info.cursorPosition.copy();\r\n-                leftColCurrRow2.x = 0;\r\n-                FillConsoleOutputAttribute(console, info.attributes, info.cursorPosition.x, leftColCurrRow2, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', info.cursorPosition.x, leftColCurrRow2, written);\r\n-                break;\r\n-            case ERASE_LINE_TO_END:\r\n-                int lengthToLastCol = info.size.x - info.cursorPosition.x;\r\n-                FillConsoleOutputAttribute(console, info.attributes, lengthToLastCol, info.cursorPosition.copy(), written);\r\n-                FillConsoleOutputCharacterW(console, ' ', lengthToLastCol, info.cursorPosition.copy(), written);\r\n-                break;\r\n-            default:\r\n-                break;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorLeft(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = (short) Math.max(0, info.cursorPosition.x - count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorRight(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = (short) Math.min(info.window.width(), info.cursorPosition.x + count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorDown(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.y = (short) Math.min(Math.max(0, info.size.y - 1), info.cursorPosition.y + count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorUp(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorTo(int row, int col) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, Math.min(info.size.y, info.window.top + row - 1));\r\n-        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), col - 1));\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorToColumn(int x) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), x - 1));\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorUpLine(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = 0;\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorDownLine(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = 0;\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y + count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x0007) | ANSI_FOREGROUND_COLOR_MAP[color]);\r\n-        if (bright) {\r\n-            info.attributes |= FOREGROUND_INTENSITY;\r\n-        }\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\r\n-        int round = Colors.roundColor(paletteIndex, 16);\r\n-        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\r\n-        int round = Colors.roundRgbColor(r, g, b, 16);\r\n-        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x0070) | ANSI_BACKGROUND_COLOR_MAP[color]);\r\n-        if (bright) {\r\n-            info.attributes |= BACKGROUND_INTENSITY;\r\n-        }\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\r\n-        int round = Colors.roundColor(paletteIndex, 16);\r\n-        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\r\n-        int round = Colors.roundRgbColor(r, g, b, 16);\r\n-        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processDefaultTextColor() throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x000F) | (originalColors & 0xF));\r\n-        info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processDefaultBackgroundColor() throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x00F0) | (originalColors & 0xF0));\r\n-        info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processAttributeReset() throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x00FF) | originalColors);\r\n-        this.negative = false;\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetAttribute(int attribute) throws IOException {\r\n-        switch (attribute) {\r\n-            case ATTRIBUTE_INTENSITY_BOLD:\r\n-                info.attributes = (short) (info.attributes | FOREGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-            case ATTRIBUTE_INTENSITY_NORMAL:\r\n-                info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-\r\n-            // Yeah, setting the background intensity is not underlining.. but it's best we can do\r\n-            // using the Windows console API\r\n-            case ATTRIBUTE_UNDERLINE:\r\n-                info.attributes = (short) (info.attributes | BACKGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-            case ATTRIBUTE_UNDERLINE_OFF:\r\n-                info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-\r\n-            case ATTRIBUTE_NEGATIVE_ON:\r\n-                negative = true;\r\n-                applyAttribute();\r\n-                break;\r\n-            case ATTRIBUTE_NEGATIVE_OFF:\r\n-                negative = false;\r\n-                applyAttribute();\r\n-                break;\r\n-            default:\r\n-                break;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSaveCursorPosition() throws IOException {\r\n-        getConsoleInfo();\r\n-        savedX = info.cursorPosition.x;\r\n-        savedY = info.cursorPosition.y;\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processRestoreCursorPosition() throws IOException {\r\n-        // restore only if there was a save operation first\r\n-        if (savedX != -1 && savedY != -1) {\r\n-            os.flush();\r\n-            info.cursorPosition.x = savedX;\r\n-            info.cursorPosition.y = savedY;\r\n-            applyCursorPosition();\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processInsertLine(int optionInt) throws IOException {\r\n-        getConsoleInfo();\r\n-        SMALL_RECT scroll = info.window.copy();\r\n-        scroll.top = info.cursorPosition.y;\r\n-        COORD org = new COORD();\r\n-        org.x = 0;\r\n-        org.y = (short)(info.cursorPosition.y + optionInt);\r\n-        CHAR_INFO info = new CHAR_INFO();\r\n-        info.attributes = originalColors;\r\n-        info.unicodeChar = ' ';\r\n-        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processDeleteLine(int optionInt) throws IOException {\r\n-        getConsoleInfo();\r\n-        SMALL_RECT scroll = info.window.copy();\r\n-        scroll.top = info.cursorPosition.y;\r\n-        COORD org = new COORD();\r\n-        org.x = 0;\r\n-        org.y = (short)(info.cursorPosition.y - optionInt);\r\n-        CHAR_INFO info = new CHAR_INFO();\r\n-        info.attributes = originalColors;\r\n-        info.unicodeChar = ' ';\r\n-        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processChangeWindowTitle(String label) {\r\n-        SetConsoleTitle(label);\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_BLUE;\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_GREEN;\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_INTENSITY;\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_RED;\n+import static org.fusesource.jansi.internal.Kernel32.CHAR_INFO;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_BLUE;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_GREEN;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_INTENSITY;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_RED;\n+import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputAttribute;\n+import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputCharacterW;\n+import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\n+import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\n+import static org.fusesource.jansi.internal.Kernel32.SMALL_RECT;\n+import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.ScrollConsoleScreenBuffer;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleCursorPosition;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleTextAttribute;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleTitle;\n+\n+import java.io.IOException;\n+import java.io.OutputStream;\n+\n+import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\n+import org.fusesource.jansi.internal.Kernel32.COORD;\n+import org.fusesource.jansi.WindowsSupport;\n+\n+/**\n+ * A Windows ANSI escape processor, that uses JNA to access native platform\n+ * API's to change the console attributes (see \n+ * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/Kernel32.html\">Jansi native Kernel32</a>).\n+ * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\n+ * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\n+ *\n+ * @since 1.19\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @author Joris Kuipers\n+ */\n+public final class WindowsAnsiProcessor extends AnsiProcessor {\n+\n+    private final long console;\n+\n+    private static final short FOREGROUND_BLACK = 0;\n+    private static final short FOREGROUND_YELLOW = (short) (FOREGROUND_RED | FOREGROUND_GREEN);\n+    private static final short FOREGROUND_MAGENTA = (short) (FOREGROUND_BLUE | FOREGROUND_RED);\n+    private static final short FOREGROUND_CYAN = (short) (FOREGROUND_BLUE | FOREGROUND_GREEN);\n+    private static final short FOREGROUND_WHITE = (short) (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\n+\n+    private static final short BACKGROUND_BLACK = 0;\n+    private static final short BACKGROUND_YELLOW = (short) (BACKGROUND_RED | BACKGROUND_GREEN);\n+    private static final short BACKGROUND_MAGENTA = (short) (BACKGROUND_BLUE | BACKGROUND_RED);\n+    private static final short BACKGROUND_CYAN = (short) (BACKGROUND_BLUE | BACKGROUND_GREEN);\n+    private static final short BACKGROUND_WHITE = (short) (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);\n+\n+    private static final short[] ANSI_FOREGROUND_COLOR_MAP = {\n+            FOREGROUND_BLACK,\n+            FOREGROUND_RED,\n+            FOREGROUND_GREEN,\n+            FOREGROUND_YELLOW,\n+            FOREGROUND_BLUE,\n+            FOREGROUND_MAGENTA,\n+            FOREGROUND_CYAN,\n+            FOREGROUND_WHITE,\n+    };\n+\n+    private static final short[] ANSI_BACKGROUND_COLOR_MAP = {\n+            BACKGROUND_BLACK,\n+            BACKGROUND_RED,\n+            BACKGROUND_GREEN,\n+            BACKGROUND_YELLOW,\n+            BACKGROUND_BLUE,\n+            BACKGROUND_MAGENTA,\n+            BACKGROUND_CYAN,\n+            BACKGROUND_WHITE,\n+    };\n+\n+    private final CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\n+    private final short originalColors;\n+\n+    private boolean negative;\n+    private short savedX = -1;\n+    private short savedY = -1;\n+\n+    public WindowsAnsiProcessor(OutputStream ps, long console) throws IOException {\n+        super(ps);\n+        this.console = console;\n+        getConsoleInfo();\n+        originalColors = info.attributes;\n+    }\n+\n+    public WindowsAnsiProcessor(OutputStream ps, boolean stdout) throws IOException {\n+        this(ps, GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE));\n+    }\n+\n+    public WindowsAnsiProcessor(OutputStream ps) throws IOException {\n+        this(ps, true);\n+    }\n+\n+    private void getConsoleInfo() throws IOException {\n+        os.flush();\n+        if (GetConsoleScreenBufferInfo(console, info) == 0) {\n+            throw new IOException(\"Could not get the screen info: \" + WindowsSupport.getLastErrorMessage());\n+        }\n+        if (negative) {\n+            info.attributes = invertAttributeColors(info.attributes);\n+        }\n+    }\n+\n+    private void applyAttribute() throws IOException {\n+        os.flush();\n+        short attributes = info.attributes;\n+        if (negative) {\n+            attributes = invertAttributeColors(attributes);\n+        }\n+        if (SetConsoleTextAttribute(console, attributes) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    private short invertAttributeColors(short attributes) {\n+        // Swap the the Foreground and Background bits.\n+        int fg = 0x000F & attributes;\n+        fg <<= 4;\n+        int bg = 0X00F0 & attributes;\n+        bg >>= 4;\n+        attributes = (short) ((attributes & 0xFF00) | fg | bg);\n+        return attributes;\n+    }\n+\n+    private void applyCursorPosition() throws IOException {\n+        if (SetConsoleCursorPosition(console, info.cursorPosition.copy()) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    @Override\n+    protected void processEraseScreen(int eraseOption) throws IOException {\n+        getConsoleInfo();\n+        int[] written = new int[1];\n+        switch (eraseOption) {\n+            case ERASE_SCREEN:\n+                COORD topLeft = new COORD();\n+                topLeft.x = 0;\n+                topLeft.y = info.window.top;\n+                int screenLength = info.window.height() * info.size.x;\n+                FillConsoleOutputAttribute(console, info.attributes, screenLength, topLeft, written);\n+                FillConsoleOutputCharacterW(console, ' ', screenLength, topLeft, written);\n+                break;\n+            case ERASE_SCREEN_TO_BEGINING:\n+                COORD topLeft2 = new COORD();\n+                topLeft2.x = 0;\n+                topLeft2.y = info.window.top;\n+                int lengthToCursor = (info.cursorPosition.y - info.window.top) * info.size.x\n+                        + info.cursorPosition.x;\n+                FillConsoleOutputAttribute(console, info.attributes, lengthToCursor, topLeft2, written);\n+                FillConsoleOutputCharacterW(console, ' ', lengthToCursor, topLeft2, written);\n+                break;\n+            case ERASE_SCREEN_TO_END:\n+                int lengthToEnd = (info.window.bottom - info.cursorPosition.y) * info.size.x +\n+                        (info.size.x - info.cursorPosition.x);\n+                FillConsoleOutputAttribute(console, info.attributes, lengthToEnd, info.cursorPosition.copy(), written);\n+                FillConsoleOutputCharacterW(console, ' ', lengthToEnd, info.cursorPosition.copy(), written);\n+                break;\n+            default:\n+                break;\n+        }\n+    }\n+\n+    @Override\n+    protected void processEraseLine(int eraseOption) throws IOException {\n+        getConsoleInfo();\n+        int[] written = new int[1];\n+        switch (eraseOption) {\n+            case ERASE_LINE:\n+                COORD leftColCurrRow = info.cursorPosition.copy();\n+                leftColCurrRow.x = 0;\n+                FillConsoleOutputAttribute(console, info.attributes, info.size.x, leftColCurrRow, written);\n+                FillConsoleOutputCharacterW(console, ' ', info.size.x, leftColCurrRow, written);\n+                break;\n+            case ERASE_LINE_TO_BEGINING:\n+                COORD leftColCurrRow2 = info.cursorPosition.copy();\n+                leftColCurrRow2.x = 0;\n+                FillConsoleOutputAttribute(console, info.attributes, info.cursorPosition.x, leftColCurrRow2, written);\n+                FillConsoleOutputCharacterW(console, ' ', info.cursorPosition.x, leftColCurrRow2, written);\n+                break;\n+            case ERASE_LINE_TO_END:\n+                int lengthToLastCol = info.size.x - info.cursorPosition.x;\n+                FillConsoleOutputAttribute(console, info.attributes, lengthToLastCol, info.cursorPosition.copy(), written);\n+                FillConsoleOutputCharacterW(console, ' ', lengthToLastCol, info.cursorPosition.copy(), written);\n+                break;\n+            default:\n+                break;\n+        }\n+    }\n+\n+    @Override\n+    protected void processCursorLeft(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = (short) Math.max(0, info.cursorPosition.x - count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorRight(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = (short) Math.min(info.window.width(), info.cursorPosition.x + count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorDown(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.y = (short) Math.min(Math.max(0, info.size.y - 1), info.cursorPosition.y + count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorUp(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorTo(int row, int col) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.y = (short) Math.max(info.window.top, Math.min(info.size.y, info.window.top + row - 1));\n+        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), col - 1));\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorToColumn(int x) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), x - 1));\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorUpLine(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = 0;\n+        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorDownLine(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = 0;\n+        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y + count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x0007) | ANSI_FOREGROUND_COLOR_MAP[color]);\n+        if (bright) {\n+            info.attributes |= FOREGROUND_INTENSITY;\n+        }\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\n+        int round = Colors.roundColor(paletteIndex, 16);\n+        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\n+        int round = Colors.roundRgbColor(r, g, b, 16);\n+        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x0070) | ANSI_BACKGROUND_COLOR_MAP[color]);\n+        if (bright) {\n+            info.attributes |= BACKGROUND_INTENSITY;\n+        }\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\n+        int round = Colors.roundColor(paletteIndex, 16);\n+        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\n+        int round = Colors.roundRgbColor(r, g, b, 16);\n+        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processDefaultTextColor() throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x000F) | (originalColors & 0xF));\n+        info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processDefaultBackgroundColor() throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x00F0) | (originalColors & 0xF0));\n+        info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processAttributeReset() throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x00FF) | originalColors);\n+        this.negative = false;\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processSetAttribute(int attribute) throws IOException {\n+        switch (attribute) {\n+            case ATTRIBUTE_INTENSITY_BOLD:\n+                info.attributes = (short) (info.attributes | FOREGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+            case ATTRIBUTE_INTENSITY_NORMAL:\n+                info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+\n+            // Yeah, setting the background intensity is not underlining.. but it's best we can do\n+            // using the Windows console API\n+            case ATTRIBUTE_UNDERLINE:\n+                info.attributes = (short) (info.attributes | BACKGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+            case ATTRIBUTE_UNDERLINE_OFF:\n+                info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+\n+            case ATTRIBUTE_NEGATIVE_ON:\n+                negative = true;\n+                applyAttribute();\n+                break;\n+            case ATTRIBUTE_NEGATIVE_OFF:\n+                negative = false;\n+                applyAttribute();\n+                break;\n+            default:\n+                break;\n+        }\n+    }\n+\n+    @Override\n+    protected void processSaveCursorPosition() throws IOException {\n+        getConsoleInfo();\n+        savedX = info.cursorPosition.x;\n+        savedY = info.cursorPosition.y;\n+    }\n+\n+    @Override\n+    protected void processRestoreCursorPosition() throws IOException {\n+        // restore only if there was a save operation first\n+        if (savedX != -1 && savedY != -1) {\n+            os.flush();\n+            info.cursorPosition.x = savedX;\n+            info.cursorPosition.y = savedY;\n+            applyCursorPosition();\n+        }\n+    }\n+\n+    @Override\n+    protected void processInsertLine(int optionInt) throws IOException {\n+        getConsoleInfo();\n+        SMALL_RECT scroll = info.window.copy();\n+        scroll.top = info.cursorPosition.y;\n+        COORD org = new COORD();\n+        org.x = 0;\n+        org.y = (short)(info.cursorPosition.y + optionInt);\n+        CHAR_INFO info = new CHAR_INFO();\n+        info.attributes = originalColors;\n+        info.unicodeChar = ' ';\n+        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    @Override\n+    protected void processDeleteLine(int optionInt) throws IOException {\n+        getConsoleInfo();\n+        SMALL_RECT scroll = info.window.copy();\n+        scroll.top = info.cursorPosition.y;\n+        COORD org = new COORD();\n+        org.x = 0;\n+        org.y = (short)(info.cursorPosition.y - optionInt);\n+        CHAR_INFO info = new CHAR_INFO();\n+        info.attributes = originalColors;\n+        info.unicodeChar = ' ';\n+        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    @Override\n+    protected void processChangeWindowTitle(String label) {\n+        SetConsoleTitle(label);\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/jansi.properties", "source2": "org/fusesource/jansi/jansi.properties", "comments": ["Ordering differences only"], "unified_diff": "@@ -1 +1 @@\n-version=${project.version}\r\n+version=${project.version}\n"}, {"source1": "META-INF/native-image/jansi/resource-config.json", "source2": "META-INF/native-image/jansi/resource-config.json", "comments": ["Format-specific differences are supported for JSON files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: JSON text data"], "has_internal_linenos": true, "unified_diff": "@@ -1,10 +1,9 @@\n-00000000: 7b0d 0a20 2022 7265 736f 7572 6365 7322  {..  \"resources\"\n-00000010: 3a20 5b0d 0a20 2020 207b 2270 6174 7465  : [..    {\"patte\n-00000020: 726e 223a 2022 6f72 672f 6675 7365 736f  rn\": \"org/fuseso\n-00000030: 7572 6365 2f6a 616e 7369 2f6a 616e 7369  urce/jansi/jansi\n-00000040: 2e70 726f 7065 7274 6965 7322 7d2c 0d0a  .properties\"},..\n-00000050: 2020 2020 7b22 7061 7474 6572 6e22 3a20      {\"pattern\": \n-00000060: 226f 7267 2f66 7573 6573 6f75 7263 652f  \"org/fusesource/\n-00000070: 6a61 6e73 692f 696e 7465 726e 616c 2f6e  jansi/internal/n\n-00000080: 6174 6976 652f 2e2a 227d 0d0a 2020 5d0d  ative/.*\"}..  ].\n-00000090: 0a7d                                     .}\n+00000000: 7b0a 2020 2272 6573 6f75 7263 6573 223a  {.  \"resources\":\n+00000010: 205b 0a20 2020 207b 2270 6174 7465 726e   [.    {\"pattern\n+00000020: 223a 2022 6f72 672f 6675 7365 736f 7572  \": \"org/fusesour\n+00000030: 6365 2f6a 616e 7369 2f6a 616e 7369 2e70  ce/jansi/jansi.p\n+00000040: 726f 7065 7274 6965 7322 7d2c 0a20 2020  roperties\"},.   \n+00000050: 207b 2270 6174 7465 726e 223a 2022 6f72   {\"pattern\": \"or\n+00000060: 672f 6675 7365 736f 7572 6365 2f6a 616e  g/fusesource/jan\n+00000070: 7369 2f69 6e74 6572 6e61 6c2f 6e61 7469  si/internal/nati\n+00000080: 7665 2f2e 2a22 7d0a 2020 5d0a 7d         ve/.*\"}.  ].}\n"}, {"source1": "META-INF/maven/org.fusesource.jansi/jansi/pom.xml", "source2": "META-INF/maven/org.fusesource.jansi/jansi/pom.xml", "comments": ["Format-specific differences are supported for XML files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: XML 1.0 document, ASCII text, with CRLF line terminators"], "has_internal_linenos": true, "unified_diff": "@@ -1,903 +1,881 @@\n 00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version=\"1\n 00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0\" encoding=\"UT\n-00000020: 462d 3822 3f3e 0d0a 3c21 2d2d 0d0a 2020  F-8\"?>..<!--..  \n-00000030: 436f 7079 7269 6768 7420 2843 2920 3230  Copyright (C) 20\n-00000040: 3039 2d32 3031 3720 7468 6520 6f72 6967  09-2017 the orig\n-00000050: 696e 616c 2061 7574 686f 7228 7329 2e0d  inal author(s)..\n-00000060: 0a0d 0a20 204c 6963 656e 7365 6420 756e  ...  Licensed un\n-00000070: 6465 7220 7468 6520 4170 6163 6865 204c  der the Apache L\n-00000080: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n-00000090: 322e 3020 2874 6865 2022 4c69 6365 6e73  2.0 (the \"Licens\n-000000a0: 6522 293b 0d0a 2020 796f 7520 6d61 7920  e\");..  you may \n-000000b0: 6e6f 7420 7573 6520 7468 6973 2066 696c  not use this fil\n-000000c0: 6520 6578 6365 7074 2069 6e20 636f 6d70  e except in comp\n-000000d0: 6c69 616e 6365 2077 6974 6820 7468 6520  liance with the \n-000000e0: 4c69 6365 6e73 652e 0d0a 2020 596f 7520  License...  You \n-000000f0: 6d61 7920 6f62 7461 696e 2061 2063 6f70  may obtain a cop\n-00000100: 7920 6f66 2074 6865 204c 6963 656e 7365  y of the License\n-00000110: 2061 740d 0a0d 0a20 2020 2020 2068 7474   at....      htt\n-00000120: 703a 2f2f 7777 772e 6170 6163 6865 2e6f  p://www.apache.o\n-00000130: 7267 2f6c 6963 656e 7365 732f 4c49 4345  rg/licenses/LICE\n-00000140: 4e53 452d 322e 300d 0a0d 0a20 2055 6e6c  NSE-2.0....  Unl\n-00000150: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n-00000160: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n-00000170: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n-00000180: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n-00000190: 0d0a 2020 6469 7374 7269 6275 7465 6420  ..  distributed \n-000001a0: 756e 6465 7220 7468 6520 4c69 6365 6e73  under the Licens\n-000001b0: 6520 6973 2064 6973 7472 6962 7574 6564  e is distributed\n-000001c0: 206f 6e20 616e 2022 4153 2049 5322 2042   on an \"AS IS\" B\n-000001d0: 4153 4953 2c0d 0a20 2057 4954 484f 5554  ASIS,..  WITHOUT\n-000001e0: 2057 4152 5241 4e54 4945 5320 4f52 2043   WARRANTIES OR C\n-000001f0: 4f4e 4449 5449 4f4e 5320 4f46 2041 4e59  ONDITIONS OF ANY\n-00000200: 204b 494e 442c 2065 6974 6865 7220 6578   KIND, either ex\n-00000210: 7072 6573 7320 6f72 2069 6d70 6c69 6564  press or implied\n-00000220: 2e0d 0a20 2053 6565 2074 6865 204c 6963  ...  See the Lic\n-00000230: 656e 7365 2066 6f72 2074 6865 2073 7065  ense for the spe\n-00000240: 6369 6669 6320 6c61 6e67 7561 6765 2067  cific language g\n-00000250: 6f76 6572 6e69 6e67 2070 6572 6d69 7373  overning permiss\n-00000260: 696f 6e73 2061 6e64 0d0a 2020 6c69 6d69  ions and..  limi\n-00000270: 7461 7469 6f6e 7320 756e 6465 7220 7468  tations under th\n-00000280: 6520 4c69 6365 6e73 652e 0d0a 2d2d 3e0d  e License...-->.\n-00000290: 0a3c 7072 6f6a 6563 7420 786d 6c6e 733d  .<project xmlns=\n-000002a0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n-000002b0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n-000002c0: 2e30 2220 786d 6c6e 733a 7873 693d 2268  .0\" xmlns:xsi=\"h\n-000002d0: 7474 703a 2f2f 7777 772e 7733 2e6f 7267  ttp://www.w3.org\n-000002e0: 2f32 3030 312f 584d 4c53 6368 656d 612d  /2001/XMLSchema-\n-000002f0: 696e 7374 616e 6365 2220 7873 693a 7363  instance\" xsi:sc\n-00000300: 6865 6d61 4c6f 6361 7469 6f6e 3d22 6874  hemaLocation=\"ht\n-00000310: 7470 3a2f 2f6d 6176 656e 2e61 7061 6368  tp://maven.apach\n-00000320: 652e 6f72 672f 504f 4d2f 342e 302e 3020  e.org/POM/4.0.0 \n-00000330: 6874 7470 3a2f 2f6d 6176 656e 2e61 7061  http://maven.apa\n-00000340: 6368 652e 6f72 672f 6d61 7665 6e2d 7634  che.org/maven-v4\n-00000350: 5f30 5f30 2e78 7364 223e 0d0a 0d0a 2020  _0_0.xsd\">....  \n-00000360: 2020 3c6d 6f64 656c 5665 7273 696f 6e3e    <modelVersion>\n-00000370: 342e 302e 303c 2f6d 6f64 656c 5665 7273  4.0.0</modelVers\n-00000380: 696f 6e3e 0d0a 2020 2020 3c70 6172 656e  ion>..    <paren\n-00000390: 743e 0d0a 2020 2020 2020 2020 3c67 726f  t>..        <gro\n-000003a0: 7570 4964 3e6f 7267 2e66 7573 6573 6f75  upId>org.fusesou\n-000003b0: 7263 653c 2f67 726f 7570 4964 3e0d 0a20  rce</groupId>.. \n-000003c0: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-000003d0: 4964 3e66 7573 6573 6f75 7263 652d 706f  Id>fusesource-po\n-000003e0: 6d3c 2f61 7274 6966 6163 7449 643e 0d0a  m</artifactId>..\n-000003f0: 2020 2020 2020 2020 3c76 6572 7369 6f6e          <version\n-00000400: 3e31 2e31 323c 2f76 6572 7369 6f6e 3e0d  >1.12</version>.\n-00000410: 0a20 2020 203c 2f70 6172 656e 743e 0d0a  .    </parent>..\n-00000420: 0d0a 2020 2020 3c67 726f 7570 4964 3e6f  ..    <groupId>o\n-00000430: 7267 2e66 7573 6573 6f75 7263 652e 6a61  rg.fusesource.ja\n-00000440: 6e73 693c 2f67 726f 7570 4964 3e0d 0a20  nsi</groupId>.. \n-00000450: 2020 203c 6172 7469 6661 6374 4964 3e6a     <artifactId>j\n-00000460: 616e 7369 3c2f 6172 7469 6661 6374 4964  ansi</artifactId\n-00000470: 3e0d 0a20 2020 203c 7665 7273 696f 6e3e  >..    <version>\n-00000480: 322e 332e 343c 2f76 6572 7369 6f6e 3e0d  2.3.4</version>.\n-00000490: 0a20 2020 203c 7061 636b 6167 696e 673e  .    <packaging>\n-000004a0: 6a61 723c 2f70 6163 6b61 6769 6e67 3e0d  jar</packaging>.\n-000004b0: 0a0d 0a20 2020 203c 6e61 6d65 3e24 7b70  ...    <name>${p\n-000004c0: 726f 6a65 6374 2e61 7274 6966 6163 7449  roject.artifactI\n-000004d0: 647d 3c2f 6e61 6d65 3e0d 0a20 2020 203c  d}</name>..    <\n-000004e0: 6465 7363 7269 7074 696f 6e3e 4a61 6e73  description>Jans\n-000004f0: 6920 6973 2061 206a 6176 6120 6c69 6272  i is a java libr\n-00000500: 6172 7920 666f 7220 6765 6e65 7261 7469  ary for generati\n-00000510: 6e67 2061 6e64 2069 6e74 6572 7072 6574  ng and interpret\n-00000520: 696e 6720 414e 5349 2065 7363 6170 6520  ing ANSI escape \n-00000530: 7365 7175 656e 6365 732e 3c2f 6465 7363  sequences.</desc\n-00000540: 7269 7074 696f 6e3e 0d0a 0d0a 2020 2020  ription>....    \n-00000550: 3c70 726f 7065 7274 6965 733e 0d0a 2020  <properties>..  \n-00000560: 2020 2020 2020 3c6a 6176 6164 6f63 536f        <javadocSo\n-00000570: 7572 6365 3e36 3c2f 6a61 7661 646f 6353  urce>6</javadocS\n-00000580: 6f75 7263 653e 0d0a 2020 2020 2020 2020  ource>..        \n-00000590: 3c6a 646b 5461 7267 6574 3e31 2e37 3c2f  <jdkTarget>1.7</\n-000005a0: 6a64 6b54 6172 6765 743e 0d0a 2020 2020  jdkTarget>..    \n-000005b0: 2020 2020 3c70 726f 6a65 6374 2e62 7569      <project.bui\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 436f  F-8\"?>.<!--.  Co\n+00000030: 7079 7269 6768 7420 2843 2920 3230 3039  pyright (C) 2009\n+00000040: 2d32 3031 3720 7468 6520 6f72 6967 696e  -2017 the origin\n+00000050: 616c 2061 7574 686f 7228 7329 2e0a 0a20  al author(s)... \n+00000060: 204c 6963 656e 7365 6420 756e 6465 7220   Licensed under \n+00000070: 7468 6520 4170 6163 6865 204c 6963 656e  the Apache Licen\n+00000080: 7365 2c20 5665 7273 696f 6e20 322e 3020  se, Version 2.0 \n+00000090: 2874 6865 2022 4c69 6365 6e73 6522 293b  (the \"License\");\n+000000a0: 0a20 2079 6f75 206d 6179 206e 6f74 2075  .  you may not u\n+000000b0: 7365 2074 6869 7320 6669 6c65 2065 7863  se this file exc\n+000000c0: 6570 7420 696e 2063 6f6d 706c 6961 6e63  ept in complianc\n+000000d0: 6520 7769 7468 2074 6865 204c 6963 656e  e with the Licen\n+000000e0: 7365 2e0a 2020 596f 7520 6d61 7920 6f62  se..  You may ob\n+000000f0: 7461 696e 2061 2063 6f70 7920 6f66 2074  tain a copy of t\n+00000100: 6865 204c 6963 656e 7365 2061 740a 0a20  he License at.. \n+00000110: 2020 2020 2068 7474 703a 2f2f 7777 772e       http://www.\n+00000120: 6170 6163 6865 2e6f 7267 2f6c 6963 656e  apache.org/licen\n+00000130: 7365 732f 4c49 4345 4e53 452d 322e 300a  ses/LICENSE-2.0.\n+00000140: 0a20 2055 6e6c 6573 7320 7265 7175 6972  .  Unless requir\n+00000150: 6564 2062 7920 6170 706c 6963 6162 6c65  ed by applicable\n+00000160: 206c 6177 206f 7220 6167 7265 6564 2074   law or agreed t\n+00000170: 6f20 696e 2077 7269 7469 6e67 2c20 736f  o in writing, so\n+00000180: 6674 7761 7265 0a20 2064 6973 7472 6962  ftware.  distrib\n+00000190: 7574 6564 2075 6e64 6572 2074 6865 204c  uted under the L\n+000001a0: 6963 656e 7365 2069 7320 6469 7374 7269  icense is distri\n+000001b0: 6275 7465 6420 6f6e 2061 6e20 2241 5320  buted on an \"AS \n+000001c0: 4953 2220 4241 5349 532c 0a20 2057 4954  IS\" BASIS,.  WIT\n+000001d0: 484f 5554 2057 4152 5241 4e54 4945 5320  HOUT WARRANTIES \n+000001e0: 4f52 2043 4f4e 4449 5449 4f4e 5320 4f46  OR CONDITIONS OF\n+000001f0: 2041 4e59 204b 494e 442c 2065 6974 6865   ANY KIND, eithe\n+00000200: 7220 6578 7072 6573 7320 6f72 2069 6d70  r express or imp\n+00000210: 6c69 6564 2e0a 2020 5365 6520 7468 6520  lied..  See the \n+00000220: 4c69 6365 6e73 6520 666f 7220 7468 6520  License for the \n+00000230: 7370 6563 6966 6963 206c 616e 6775 6167  specific languag\n+00000240: 6520 676f 7665 726e 696e 6720 7065 726d  e governing perm\n+00000250: 6973 7369 6f6e 7320 616e 640a 2020 6c69  issions and.  li\n+00000260: 6d69 7461 7469 6f6e 7320 756e 6465 7220  mitations under \n+00000270: 7468 6520 4c69 6365 6e73 652e 0a2d 2d3e  the License..-->\n+00000280: 0a3c 7072 6f6a 6563 7420 786d 6c6e 733d  .<project xmlns=\n+00000290: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n+000002a0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n+000002b0: 2e30 2220 786d 6c6e 733a 7873 693d 2268  .0\" xmlns:xsi=\"h\n+000002c0: 7474 703a 2f2f 7777 772e 7733 2e6f 7267  ttp://www.w3.org\n+000002d0: 2f32 3030 312f 584d 4c53 6368 656d 612d  /2001/XMLSchema-\n+000002e0: 696e 7374 616e 6365 2220 7873 693a 7363  instance\" xsi:sc\n+000002f0: 6865 6d61 4c6f 6361 7469 6f6e 3d22 6874  hemaLocation=\"ht\n+00000300: 7470 3a2f 2f6d 6176 656e 2e61 7061 6368  tp://maven.apach\n+00000310: 652e 6f72 672f 504f 4d2f 342e 302e 3020  e.org/POM/4.0.0 \n+00000320: 6874 7470 3a2f 2f6d 6176 656e 2e61 7061  http://maven.apa\n+00000330: 6368 652e 6f72 672f 6d61 7665 6e2d 7634  che.org/maven-v4\n+00000340: 5f30 5f30 2e78 7364 223e 0a0a 2020 2020  _0_0.xsd\">..    \n+00000350: 3c6d 6f64 656c 5665 7273 696f 6e3e 342e  <modelVersion>4.\n+00000360: 302e 303c 2f6d 6f64 656c 5665 7273 696f  0.0</modelVersio\n+00000370: 6e3e 0a20 2020 203c 7061 7265 6e74 3e0a  n>.    <parent>.\n+00000380: 2020 2020 2020 2020 3c67 726f 7570 4964          <groupId\n+00000390: 3e6f 7267 2e66 7573 6573 6f75 7263 653c  >org.fusesource<\n+000003a0: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+000003b0: 2020 3c61 7274 6966 6163 7449 643e 6675    <artifactId>fu\n+000003c0: 7365 736f 7572 6365 2d70 6f6d 3c2f 6172  sesource-pom</ar\n+000003d0: 7469 6661 6374 4964 3e0a 2020 2020 2020  tifactId>.      \n+000003e0: 2020 3c76 6572 7369 6f6e 3e31 2e31 323c    <version>1.12<\n+000003f0: 2f76 6572 7369 6f6e 3e0a 2020 2020 3c2f  /version>.    </\n+00000400: 7061 7265 6e74 3e0a 0a20 2020 203c 6772  parent>..    <gr\n+00000410: 6f75 7049 643e 6f72 672e 6675 7365 736f  oupId>org.fuseso\n+00000420: 7572 6365 2e6a 616e 7369 3c2f 6772 6f75  urce.jansi</grou\n+00000430: 7049 643e 0a20 2020 203c 6172 7469 6661  pId>.    <artifa\n+00000440: 6374 4964 3e6a 616e 7369 3c2f 6172 7469  ctId>jansi</arti\n+00000450: 6661 6374 4964 3e0a 2020 2020 3c76 6572  factId>.    <ver\n+00000460: 7369 6f6e 3e32 2e33 2e34 3c2f 7665 7273  sion>2.3.4</vers\n+00000470: 696f 6e3e 0a20 2020 203c 7061 636b 6167  ion>.    <packag\n+00000480: 696e 673e 6a61 723c 2f70 6163 6b61 6769  ing>jar</packagi\n+00000490: 6e67 3e0a 0a20 2020 203c 6e61 6d65 3e24  ng>..    <name>$\n+000004a0: 7b70 726f 6a65 6374 2e61 7274 6966 6163  {project.artifac\n+000004b0: 7449 647d 3c2f 6e61 6d65 3e0a 2020 2020  tId}</name>.    \n+000004c0: 3c64 6573 6372 6970 7469 6f6e 3e4a 616e  <description>Jan\n+000004d0: 7369 2069 7320 6120 6a61 7661 206c 6962  si is a java lib\n+000004e0: 7261 7279 2066 6f72 2067 656e 6572 6174  rary for generat\n+000004f0: 696e 6720 616e 6420 696e 7465 7270 7265  ing and interpre\n+00000500: 7469 6e67 2041 4e53 4920 6573 6361 7065  ting ANSI escape\n+00000510: 2073 6571 7565 6e63 6573 2e3c 2f64 6573   sequences.</des\n+00000520: 6372 6970 7469 6f6e 3e0a 0a20 2020 203c  cription>..    <\n+00000530: 7072 6f70 6572 7469 6573 3e0a 2020 2020  properties>.    \n+00000540: 2020 2020 3c6a 6176 6164 6f63 536f 7572      <javadocSour\n+00000550: 6365 3e36 3c2f 6a61 7661 646f 6353 6f75  ce>6</javadocSou\n+00000560: 7263 653e 0a20 2020 2020 2020 203c 6a64  rce>.        <jd\n+00000570: 6b54 6172 6765 743e 312e 373c 2f6a 646b  kTarget>1.7</jdk\n+00000580: 5461 7267 6574 3e0a 2020 2020 2020 2020  Target>.        \n+00000590: 3c70 726f 6a65 6374 2e62 7569 6c64 2e73  <project.build.s\n+000005a0: 6f75 7263 6545 6e63 6f64 696e 673e 5554  ourceEncoding>UT\n+000005b0: 462d 383c 2f70 726f 6a65 6374 2e62 7569  F-8</project.bui\n 000005c0: 6c64 2e73 6f75 7263 6545 6e63 6f64 696e  ld.sourceEncodin\n-000005d0: 673e 5554 462d 383c 2f70 726f 6a65 6374  g>UTF-8</project\n-000005e0: 2e62 7569 6c64 2e73 6f75 7263 6545 6e63  .build.sourceEnc\n-000005f0: 6f64 696e 673e 0d0a 2020 2020 2020 2020  oding>..        \n-00000600: 3c73 6c66 346a 2d76 6572 7369 6f6e 3e31  <slf4j-version>1\n-00000610: 2e36 2e31 3c2f 736c 6634 6a2d 7665 7273  .6.1</slf4j-vers\n-00000620: 696f 6e3e 0d0a 2020 2020 2020 2020 3c70  ion>..        <p\n-00000630: 726f 6a65 6374 2e62 7569 6c64 2e6f 7574  roject.build.out\n-00000640: 7075 7454 696d 6573 7461 6d70 3e32 3032  putTimestamp>202\n-00000650: 312d 3037 2d32 3354 3133 3a31 333a 3433  1-07-23T13:13:43\n-00000660: 5a3c 2f70 726f 6a65 6374 2e62 7569 6c64  Z</project.build\n-00000670: 2e6f 7574 7075 7454 696d 6573 7461 6d70  .outputTimestamp\n-00000680: 3e0d 0a20 2020 203c 2f70 726f 7065 7274  >..    </propert\n-00000690: 6965 733e 0d0a 0d0a 2020 2020 3c75 726c  ies>....    <url\n-000006a0: 3e68 7474 703a 2f2f 6675 7365 736f 7572  >http://fusesour\n-000006b0: 6365 2e67 6974 6875 622e 696f 2f6a 616e  ce.github.io/jan\n-000006c0: 7369 3c2f 7572 6c3e 0d0a 2020 2020 3c69  si</url>..    <i\n-000006d0: 6e63 6570 7469 6f6e 5965 6172 3e32 3030  nceptionYear>200\n-000006e0: 393c 2f69 6e63 6570 7469 6f6e 5965 6172  9</inceptionYear\n-000006f0: 3e0d 0a0d 0a20 2020 203c 6973 7375 654d  >....    <issueM\n-00000700: 616e 6167 656d 656e 743e 0d0a 2020 2020  anagement>..    \n-00000710: 2020 2020 3c73 7973 7465 6d3e 6a69 7261      <system>jira\n-00000720: 3c2f 7379 7374 656d 3e0d 0a20 2020 2020  </system>..     \n-00000730: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000740: 6769 7468 7562 2e63 6f6d 2f66 7573 6573  github.com/fuses\n-00000750: 6f75 7263 652f 6a61 6e73 692f 6973 7375  ource/jansi/issu\n-00000760: 6573 3c2f 7572 6c3e 0d0a 2020 2020 3c2f  es</url>..    </\n-00000770: 6973 7375 654d 616e 6167 656d 656e 743e  issueManagement>\n-00000780: 0d0a 0d0a 2020 2020 3c6d 6169 6c69 6e67  ....    <mailing\n-00000790: 4c69 7374 733e 0d0a 2020 2020 2020 2020  Lists>..        \n-000007a0: 3c6d 6169 6c69 6e67 4c69 7374 3e0d 0a20  <mailingList>.. \n-000007b0: 2020 2020 2020 2020 2020 203c 6e61 6d65             <name\n-000007c0: 3e44 6973 6375 7373 696f 6e20 4c69 7374  >Discussion List\n-000007d0: 3c2f 6e61 6d65 3e0d 0a20 2020 2020 2020  </name>..       \n-000007e0: 2020 2020 203c 6172 6368 6976 653e 6874       <archive>ht\n-000007f0: 7470 3a2f 2f67 726f 7570 732e 676f 6f67  tp://groups.goog\n-00000800: 6c65 2e63 6f6d 2f67 726f 7570 2f6a 616e  le.com/group/jan\n-00000810: 7369 3c2f 6172 6368 6976 653e 0d0a 2020  si</archive>..  \n-00000820: 2020 2020 2020 2020 2020 3c70 6f73 743e            <post>\n-00000830: 6a61 6e73 692d 6465 7640 676f 6f67 6c65  jansi-dev@google\n-00000840: 6772 6f75 7073 2e63 6f6d 3c2f 706f 7374  groups.com</post\n-00000850: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00000860: 7375 6273 6372 6962 653e 6a61 6e73 692d  subscribe>jansi-\n-00000870: 6465 762b 7375 6273 6372 6962 6540 676f  dev+subscribe@go\n-00000880: 6f67 6c65 6772 6f75 7073 2e63 6f6d 3c2f  oglegroups.com</\n-00000890: 7375 6273 6372 6962 653e 0d0a 2020 2020  subscribe>..    \n-000008a0: 2020 2020 2020 2020 3c75 6e73 7562 7363          <unsubsc\n-000008b0: 7269 6265 3e6a 616e 7369 2d64 6576 2b75  ribe>jansi-dev+u\n-000008c0: 6e73 7562 7363 7269 6265 4067 6f6f 676c  nsubscribe@googl\n-000008d0: 6567 726f 7570 732e 636f 6d3c 2f75 6e73  egroups.com</uns\n-000008e0: 7562 7363 7269 6265 3e0d 0a20 2020 2020  ubscribe>..     \n-000008f0: 2020 203c 2f6d 6169 6c69 6e67 4c69 7374     </mailingList\n-00000900: 3e0d 0a20 2020 2020 2020 203c 6d61 696c  >..        <mail\n-00000910: 696e 674c 6973 743e 0d0a 2020 2020 2020  ingList>..      \n-00000920: 2020 2020 2020 3c6e 616d 653e 436f 6d6d        <name>Comm\n-00000930: 6974 7320 616e 6420 4973 7375 6520 5472  its and Issue Tr\n-00000940: 6163 6b65 7220 4c69 7374 3c2f 6e61 6d65  acker List</name\n-00000950: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00000960: 6172 6368 6976 653e 6874 7470 3a2f 2f67  archive>http://g\n-00000970: 726f 7570 732e 676f 6f67 6c65 2e63 6f6d  roups.google.com\n-00000980: 2f67 726f 7570 2f6a 616e 7369 2d63 6f6d  /group/jansi-com\n-00000990: 6d69 7473 3c2f 6172 6368 6976 653e 0d0a  mits</archive>..\n-000009a0: 2020 2020 2020 2020 2020 2020 3c70 6f73              <pos\n-000009b0: 743e 6a61 6e73 692d 636f 6d6d 6974 7340  t>jansi-commits@\n-000009c0: 676f 6f67 6c65 6772 6f75 7073 2e63 6f6d  googlegroups.com\n-000009d0: 3c2f 706f 7374 3e0d 0a20 2020 2020 2020  </post>..       \n-000009e0: 2020 2020 203c 7375 6273 6372 6962 653e       <subscribe>\n-000009f0: 6a61 6e73 692d 636f 6d6d 6974 732b 7375  jansi-commits+su\n-00000a00: 6273 6372 6962 6540 676f 6f67 6c65 6772  bscribe@googlegr\n-00000a10: 6f75 7073 2e63 6f6d 3c2f 7375 6273 6372  oups.com</subscr\n-00000a20: 6962 653e 0d0a 2020 2020 2020 2020 2020  ibe>..          \n-00000a30: 2020 3c75 6e73 7562 7363 7269 6265 3e6a    <unsubscribe>j\n-00000a40: 616e 7369 2d63 6f6d 6d69 736f 7473 2b75  ansi-commisots+u\n-00000a50: 6e73 7562 7363 7269 6265 4067 6f6f 676c  nsubscribe@googl\n-00000a60: 6567 726f 7570 732e 636f 6d3c 2f75 6e73  egroups.com</uns\n-00000a70: 7562 7363 7269 6265 3e0d 0a20 2020 2020  ubscribe>..     \n-00000a80: 2020 203c 2f6d 6169 6c69 6e67 4c69 7374     </mailingList\n-00000a90: 3e0d 0a20 2020 203c 2f6d 6169 6c69 6e67  >..    </mailing\n-00000aa0: 4c69 7374 733e 0d0a 0d0a 2020 2020 3c6c  Lists>....    <l\n-00000ab0: 6963 656e 7365 733e 0d0a 2020 2020 2020  icenses>..      \n-00000ac0: 2020 3c6c 6963 656e 7365 3e0d 0a20 2020    <license>..   \n-00000ad0: 2020 2020 2020 2020 203c 6e61 6d65 3e54           <name>T\n-00000ae0: 6865 2041 7061 6368 6520 536f 6674 7761  he Apache Softwa\n-00000af0: 7265 204c 6963 656e 7365 2c20 5665 7273  re License, Vers\n-00000b00: 696f 6e20 322e 303c 2f6e 616d 653e 0d0a  ion 2.0</name>..\n-00000b10: 2020 2020 2020 2020 2020 2020 3c75 726c              <url\n-00000b20: 3e68 7474 703a 2f2f 7777 772e 6170 6163  >http://www.apac\n-00000b30: 6865 2e6f 7267 2f6c 6963 656e 7365 732f  he.org/licenses/\n-00000b40: 4c49 4345 4e53 452d 322e 302e 7478 743c  LICENSE-2.0.txt<\n-00000b50: 2f75 726c 3e0d 0a20 2020 2020 2020 2020  /url>..         \n-00000b60: 2020 203c 6469 7374 7269 6275 7469 6f6e     <distribution\n-00000b70: 3e72 6570 6f3c 2f64 6973 7472 6962 7574  >repo</distribut\n-00000b80: 696f 6e3e 0d0a 2020 2020 2020 2020 3c2f  ion>..        </\n-00000b90: 6c69 6365 6e73 653e 0d0a 2020 2020 3c2f  license>..    </\n-00000ba0: 6c69 6365 6e73 6573 3e0d 0a0d 0a20 2020  licenses>....   \n-00000bb0: 203c 7363 6d3e 0d0a 2020 2020 2020 2020   <scm>..        \n-00000bc0: 3c75 726c 3e68 7474 7073 3a2f 2f67 6974  <url>https://git\n-00000bd0: 6875 622e 636f 6d2f 6675 7365 736f 7572  hub.com/fusesour\n-00000be0: 6365 2f6a 616e 7369 3c2f 7572 6c3e 0d0a  ce/jansi</url>..\n-00000bf0: 2020 2020 2020 2020 3c63 6f6e 6e65 6374          <connect\n-00000c00: 696f 6e3e 7363 6d3a 6769 743a 6769 743a  ion>scm:git:git:\n-00000c10: 2f2f 6769 7468 7562 2e63 6f6d 2f66 7573  //github.com/fus\n-00000c20: 6573 6f75 7263 652f 6a61 6e73 692e 6769  esource/jansi.gi\n-00000c30: 743c 2f63 6f6e 6e65 6374 696f 6e3e 0d0a  t</connection>..\n-00000c40: 2020 2020 2020 2020 3c64 6576 656c 6f70          <develop\n-00000c50: 6572 436f 6e6e 6563 7469 6f6e 3e73 636d  erConnection>scm\n-00000c60: 3a67 6974 3a73 7368 3a2f 2f67 6974 4067  :git:ssh://git@g\n-00000c70: 6974 6875 622e 636f 6d2f 6675 7365 736f  ithub.com/fuseso\n-00000c80: 7572 6365 2f6a 616e 7369 2e67 6974 3c2f  urce/jansi.git</\n-00000c90: 6465 7665 6c6f 7065 7243 6f6e 6e65 6374  developerConnect\n-00000ca0: 696f 6e3e 0d0a 2020 2020 2020 3c74 6167  ion>..      <tag\n-00000cb0: 3e6a 616e 7369 2d32 2e33 2e34 3c2f 7461  >jansi-2.3.4</ta\n-00000cc0: 673e 0d0a 2020 3c2f 7363 6d3e 0d0a 0d0a  g>..  </scm>....\n-00000cd0: 2020 2020 3c64 6973 7472 6962 7574 696f      <distributio\n-00000ce0: 6e4d 616e 6167 656d 656e 743e 0d0a 2020  nManagement>..  \n-00000cf0: 2020 2020 2020 3c72 6570 6f73 6974 6f72        <repositor\n-00000d00: 793e 0d0a 2020 2020 2020 2020 2020 2020  y>..            \n-00000d10: 3c69 643e 736f 6e61 7479 7065 2d6e 6578  <id>sonatype-nex\n-00000d20: 7573 2d73 7461 6769 6e67 3c2f 6964 3e0d  us-staging</id>.\n-00000d30: 0a20 2020 2020 2020 2020 2020 203c 6e61  .            <na\n-00000d40: 6d65 3e53 6f6e 6174 7970 6520 5374 6167  me>Sonatype Stag\n-00000d50: 696e 6720 5265 706f 7369 746f 7279 3c2f  ing Repository</\n-00000d60: 6e61 6d65 3e0d 0a20 2020 2020 2020 2020  name>..         \n-00000d70: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000d80: 6f73 732e 736f 6e61 7479 7065 2e6f 7267  oss.sonatype.org\n-00000d90: 2f73 6572 7669 6365 2f6c 6f63 616c 2f73  /service/local/s\n-00000da0: 7461 6769 6e67 2f64 6570 6c6f 792f 6d61  taging/deploy/ma\n-00000db0: 7665 6e32 3c2f 7572 6c3e 0d0a 2020 2020  ven2</url>..    \n-00000dc0: 2020 2020 3c2f 7265 706f 7369 746f 7279      </repository\n-00000dd0: 3e0d 0a20 2020 2020 2020 203c 736e 6170  >..        <snap\n-00000de0: 7368 6f74 5265 706f 7369 746f 7279 3e0d  shotRepository>.\n-00000df0: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n-00000e00: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n-00000e10: 736e 6170 7368 6f74 733c 2f69 643e 0d0a  snapshots</id>..\n-00000e20: 2020 2020 2020 2020 2020 2020 3c6e 616d              <nam\n-00000e30: 653e 536f 6e61 7479 7065 2053 6e61 7073  e>Sonatype Snaps\n-00000e40: 686f 7420 5265 706f 7369 746f 7279 3c2f  hot Repository</\n-00000e50: 6e61 6d65 3e0d 0a20 2020 2020 2020 2020  name>..         \n-00000e60: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000e70: 6f73 732e 736f 6e61 7479 7065 2e6f 7267  oss.sonatype.org\n-00000e80: 2f63 6f6e 7465 6e74 2f72 6570 6f73 6974  /content/reposit\n-00000e90: 6f72 6965 732f 736e 6170 7368 6f74 733c  ories/snapshots<\n-00000ea0: 2f75 726c 3e0d 0a20 2020 2020 2020 203c  /url>..        <\n-00000eb0: 2f73 6e61 7073 686f 7452 6570 6f73 6974  /snapshotReposit\n-00000ec0: 6f72 793e 0d0a 2020 2020 3c2f 6469 7374  ory>..    </dist\n-00000ed0: 7269 6275 7469 6f6e 4d61 6e61 6765 6d65  ributionManageme\n-00000ee0: 6e74 3e0d 0a0d 0a20 2020 203c 7265 706f  nt>....    <repo\n-00000ef0: 7369 746f 7269 6573 3e0d 0a20 2020 2020  sitories>..     \n-00000f00: 2020 203c 7265 706f 7369 746f 7279 3e0d     <repository>.\n-00000f10: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n-00000f20: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n-00000f30: 736e 6170 7368 6f74 733c 2f69 643e 0d0a  snapshots</id>..\n-00000f40: 2020 2020 2020 2020 2020 2020 3c6e 616d              <nam\n-00000f50: 653e 536f 6e61 7479 7065 2053 6e61 7073  e>Sonatype Snaps\n-00000f60: 686f 7420 5265 706f 7369 746f 7279 3c2f  hot Repository</\n-00000f70: 6e61 6d65 3e0d 0a20 2020 2020 2020 2020  name>..         \n-00000f80: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000f90: 6f73 732e 736f 6e61 7479 7065 2e6f 7267  oss.sonatype.org\n-00000fa0: 2f63 6f6e 7465 6e74 2f72 6570 6f73 6974  /content/reposit\n-00000fb0: 6f72 6965 732f 736e 6170 7368 6f74 733c  ories/snapshots<\n-00000fc0: 2f75 726c 3e0d 0a20 2020 2020 2020 2020  /url>..         \n-00000fd0: 2020 203c 736e 6170 7368 6f74 733e 0d0a     <snapshots>..\n-00000fe0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00000ff0: 3c65 6e61 626c 6564 3e74 7275 653c 2f65  <enabled>true</e\n-00001000: 6e61 626c 6564 3e0d 0a20 2020 2020 2020  nabled>..       \n-00001010: 2020 2020 203c 2f73 6e61 7073 686f 7473       </snapshots\n-00001020: 3e0d 0a20 2020 2020 2020 203c 2f72 6570  >..        </rep\n-00001030: 6f73 6974 6f72 793e 0d0a 2020 2020 3c2f  ository>..    </\n-00001040: 7265 706f 7369 746f 7269 6573 3e0d 0a0d  repositories>...\n-00001050: 0a20 2020 203c 6465 7665 6c6f 7065 7273  .    <developers\n-00001060: 3e0d 0a20 2020 2020 2020 203c 6465 7665  >..        <deve\n-00001070: 6c6f 7065 723e 0d0a 2020 2020 2020 2020  loper>..        \n-00001080: 2020 2020 3c69 643e 6368 6972 696e 6f3c      <id>chirino<\n-00001090: 2f69 643e 0d0a 2020 2020 2020 2020 2020  /id>..          \n-000010a0: 2020 3c6e 616d 653e 4869 7261 6d20 4368    <name>Hiram Ch\n-000010b0: 6972 696e 6f3c 2f6e 616d 653e 0d0a 2020  irino</name>..  \n-000010c0: 2020 2020 2020 2020 2020 3c65 6d61 696c            <email\n-000010d0: 3e68 6972 616d 4068 6972 616d 6368 6972  >hiram@hiramchir\n-000010e0: 696e 6f2e 636f 6d3c 2f65 6d61 696c 3e0d  ino.com</email>.\n-000010f0: 0a20 2020 2020 2020 2020 2020 203c 7572  .            <ur\n-00001100: 6c3e 6874 7470 3a2f 2f68 6972 616d 6368  l>http://hiramch\n-00001110: 6972 696e 6f2e 636f 6d3c 2f75 726c 3e0d  irino.com</url>.\n-00001120: 0a20 2020 2020 2020 2020 2020 203c 7469  .            <ti\n-00001130: 6d65 7a6f 6e65 3e47 4d54 2d35 3c2f 7469  mezone>GMT-5</ti\n-00001140: 6d65 7a6f 6e65 3e0d 0a20 2020 2020 2020  mezone>..       \n-00001150: 203c 2f64 6576 656c 6f70 6572 3e0d 0a20   </developer>.. \n-00001160: 2020 2020 2020 203c 6465 7665 6c6f 7065         <develope\n-00001170: 723e 0d0a 2020 2020 2020 2020 2020 2020  r>..            \n-00001180: 3c69 643e 676e 6f64 6574 3c2f 6964 3e0d  <id>gnodet</id>.\n-00001190: 0a20 2020 2020 2020 2020 2020 203c 6e61  .            <na\n-000011a0: 6d65 3e47 7569 6c6c 6175 6d65 204e 6f64  me>Guillaume Nod\n-000011b0: 6574 3c2f 6e61 6d65 3e0d 0a20 2020 2020  et</name>..     \n-000011c0: 2020 2020 2020 203c 656d 6169 6c3e 676e         <email>gn\n-000011d0: 6f64 6574 4067 6d61 696c 2e63 6f6d 3c2f  odet@gmail.com</\n-000011e0: 656d 6169 6c3e 0d0a 2020 2020 2020 2020  email>..        \n-000011f0: 2020 2020 3c74 696d 657a 6f6e 653e 474d      <timezone>GM\n-00001200: 542b 313c 2f74 696d 657a 6f6e 653e 0d0a  T+1</timezone>..\n-00001210: 2020 2020 2020 2020 3c2f 6465 7665 6c6f          </develo\n-00001220: 7065 723e 0d0a 2020 2020 3c2f 6465 7665  per>..    </deve\n-00001230: 6c6f 7065 7273 3e0d 0a0d 0a20 2020 203c  lopers>....    <\n-00001240: 6275 696c 643e 0d0a 2020 2020 2020 2020  build>..        \n-00001250: 3c65 7874 656e 7369 6f6e 733e 0d0a 2020  <extensions>..  \n-00001260: 2020 2020 2020 2020 2020 3c65 7874 656e            <exten\n-00001270: 7369 6f6e 3e0d 0a20 2020 2020 2020 2020  sion>..         \n-00001280: 2020 2020 2020 203c 6772 6f75 7049 643e         <groupId>\n-00001290: 6f72 672e 6675 7365 736f 7572 6365 2e6d  org.fusesource.m\n-000012a0: 766e 706c 7567 696e 733c 2f67 726f 7570  vnplugins</group\n-000012b0: 4964 3e0d 0a20 2020 2020 2020 2020 2020  Id>..           \n-000012c0: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n-000012d0: 3e66 7573 652d 6a78 722d 736b 696e 3c2f  >fuse-jxr-skin</\n-000012e0: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n-000012f0: 2020 2020 2020 2020 2020 2020 203c 7665               <ve\n-00001300: 7273 696f 6e3e 312e 393c 2f76 6572 7369  rsion>1.9</versi\n-00001310: 6f6e 3e0d 0a20 2020 2020 2020 2020 2020  on>..           \n-00001320: 203c 2f65 7874 656e 7369 6f6e 3e0d 0a20   </extension>.. \n-00001330: 2020 2020 2020 203c 2f65 7874 656e 7369         </extensi\n-00001340: 6f6e 733e 0d0a 0d0a 2020 2020 2020 2020  ons>....        \n-00001350: 3c72 6573 6f75 7263 6573 3e0d 0a20 2020  <resources>..   \n-00001360: 2020 2020 2020 2020 203c 7265 736f 7572           <resour\n-00001370: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00001380: 2020 2020 203c 6469 7265 6374 6f72 793e       <directory>\n-00001390: 7372 632f 6d61 696e 2f72 6573 6f75 7263  src/main/resourc\n-000013a0: 6573 3c2f 6469 7265 6374 6f72 793e 0d0a  es</directory>..\n-000013b0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000013c0: 3c66 696c 7465 7269 6e67 3e74 7275 653c  <filtering>true<\n-000013d0: 2f66 696c 7465 7269 6e67 3e0d 0a20 2020  /filtering>..   \n-000013e0: 2020 2020 2020 2020 2020 2020 203c 696e               <in\n-000013f0: 636c 7564 6573 3e0d 0a20 2020 2020 2020  cludes>..       \n-00001400: 2020 2020 2020 2020 2020 2020 203c 696e               <in\n-00001410: 636c 7564 653e 2a2a 2f2a 2e70 726f 7065  clude>**/*.prope\n-00001420: 7274 6965 733c 2f69 6e63 6c75 6465 3e0d  rties</include>.\n-00001430: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001440: 203c 2f69 6e63 6c75 6465 733e 0d0a 2020   </includes>..  \n-00001450: 2020 2020 2020 2020 2020 3c2f 7265 736f            </reso\n-00001460: 7572 6365 3e0d 0a20 2020 2020 2020 2020  urce>..         \n-00001470: 2020 203c 7265 736f 7572 6365 3e0d 0a20     <resource>.. \n-00001480: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001490: 6469 7265 6374 6f72 793e 7372 632f 6d61  directory>src/ma\n-000014a0: 696e 2f72 6573 6f75 7263 6573 3c2f 6469  in/resources</di\n-000014b0: 7265 6374 6f72 793e 0d0a 2020 2020 2020  rectory>..      \n-000014c0: 2020 2020 2020 2020 2020 3c66 696c 7465            <filte\n-000014d0: 7269 6e67 3e66 616c 7365 3c2f 6669 6c74  ring>false</filt\n-000014e0: 6572 696e 673e 0d0a 2020 2020 2020 2020  ering>..        \n-000014f0: 2020 2020 2020 2020 3c65 7863 6c75 6465          <exclude\n-00001500: 733e 0d0a 2020 2020 2020 2020 2020 2020  s>..            \n-00001510: 2020 2020 2020 2020 3c65 7863 6c75 6465          <exclude\n-00001520: 3e2a 2a2f 2a2e 7072 6f70 6572 7469 6573  >**/*.properties\n-00001530: 3c2f 6578 636c 7564 653e 0d0a 2020 2020  </exclude>..    \n-00001540: 2020 2020 2020 2020 2020 2020 3c2f 6578              </ex\n-00001550: 636c 7564 6573 3e0d 0a20 2020 2020 2020  cludes>..       \n-00001560: 2020 2020 203c 2f72 6573 6f75 7263 653e       </resource>\n-00001570: 0d0a 2020 2020 2020 2020 3c2f 7265 736f  ..        </reso\n-00001580: 7572 6365 733e 0d0a 0d0a 2020 2020 2020  urces>....      \n-00001590: 2020 3c70 6c75 6769 6e73 3e0d 0a20 2020    <plugins>..   \n-000015a0: 2020 2020 2020 2020 203c 706c 7567 696e           <plugin\n-000015b0: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-000015c0: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-000015d0: 6170 6163 6865 2e6d 6176 656e 2e70 6c75  apache.maven.plu\n-000015e0: 6769 6e73 3c2f 6772 6f75 7049 643e 0d0a  gins</groupId>..\n-000015f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001600: 3c61 7274 6966 6163 7449 643e 6d61 7665  <artifactId>mave\n-00001610: 6e2d 636f 6d70 696c 6572 2d70 6c75 6769  n-compiler-plugi\n-00001620: 6e3c 2f61 7274 6966 6163 7449 643e 0d0a  n</artifactId>..\n-00001630: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001640: 3c76 6572 7369 6f6e 3e33 2e38 2e31 3c2f  <version>3.8.1</\n-00001650: 7665 7273 696f 6e3e 0d0a 2020 2020 2020  version>..      \n-00001660: 2020 2020 2020 2020 2020 3c63 6f6e 6669            <confi\n-00001670: 6775 7261 7469 6f6e 3e0d 0a20 2020 2020  guration>..     \n-00001680: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001690: 212d 2d20 7061 7265 6e74 2070 6f6d 2031  !-- parent pom 1\n-000016a0: 2e31 3120 666f 7263 6573 2076 6572 7369  .11 forces versi\n-000016b0: 6f6e 2069 6e73 7465 6164 206f 6620 7573  on instead of us\n-000016c0: 696e 6720 7072 6f70 6572 7479 202d 2d3e  ing property -->\n-000016d0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-000016e0: 2020 2020 2020 3c73 6f75 7263 653e 247b        <source>${\n-000016f0: 6a64 6b54 6172 6765 747d 3c2f 736f 7572  jdkTarget}</sour\n-00001700: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00001710: 2020 2020 2020 2020 203c 7461 7267 6574           <target\n-00001720: 3e24 7b6a 646b 5461 7267 6574 7d3c 2f74  >${jdkTarget}</t\n-00001730: 6172 6765 743e 0d0a 2020 2020 2020 2020  arget>..        \n-00001740: 2020 2020 2020 2020 3c2f 636f 6e66 6967          </config\n-00001750: 7572 6174 696f 6e3e 0d0a 2020 2020 2020  uration>..      \n-00001760: 2020 2020 2020 3c2f 706c 7567 696e 3e0d        </plugin>.\n-00001770: 0a20 2020 2020 2020 2020 2020 203c 706c  .            <pl\n-00001780: 7567 696e 3e0d 0a20 2020 2020 2020 2020  ugin>..         \n-00001790: 2020 2020 2020 203c 6772 6f75 7049 643e         <groupId>\n-000017a0: 6f72 672e 6170 6163 6865 2e66 656c 6978  org.apache.felix\n-000017b0: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-000017c0: 2020 2020 2020 2020 2020 2020 3c61 7274              <art\n-000017d0: 6966 6163 7449 643e 6d61 7665 6e2d 6275  ifactId>maven-bu\n-000017e0: 6e64 6c65 2d70 6c75 6769 6e3c 2f61 7274  ndle-plugin</art\n-000017f0: 6966 6163 7449 643e 0d0a 2020 2020 2020  ifactId>..      \n-00001800: 2020 2020 2020 2020 2020 3c76 6572 7369            <versi\n-00001810: 6f6e 3e35 2e31 2e31 3c2f 7665 7273 696f  on>5.1.1</versio\n-00001820: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00001830: 2020 2020 3c65 7865 6375 7469 6f6e 733e      <executions>\n-00001840: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00001850: 2020 2020 2020 3c65 7865 6375 7469 6f6e        <execution\n-00001860: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00001870: 2020 2020 2020 2020 2020 203c 6964 3e62             <id>b\n-00001880: 756e 646c 652d 6d61 6e69 6665 7374 3c2f  undle-manifest</\n-00001890: 6964 3e0d 0a20 2020 2020 2020 2020 2020  id>..           \n-000018a0: 2020 2020 2020 2020 2020 2020 203c 7068               <ph\n-000018b0: 6173 653e 7072 6f63 6573 732d 636c 6173  ase>process-clas\n-000018c0: 7365 733c 2f70 6861 7365 3e0d 0a20 2020  ses</phase>..   \n-000018d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000018e0: 2020 2020 203c 676f 616c 733e 0d0a 2020       <goals>..  \n+000005d0: 673e 0a20 2020 2020 2020 203c 736c 6634  g>.        <slf4\n+000005e0: 6a2d 7665 7273 696f 6e3e 312e 362e 313c  j-version>1.6.1<\n+000005f0: 2f73 6c66 346a 2d76 6572 7369 6f6e 3e0a  /slf4j-version>.\n+00000600: 2020 2020 2020 2020 3c70 726f 6a65 6374          <project\n+00000610: 2e62 7569 6c64 2e6f 7574 7075 7454 696d  .build.outputTim\n+00000620: 6573 7461 6d70 3e32 3032 312d 3037 2d32  estamp>2021-07-2\n+00000630: 3354 3133 3a31 333a 3433 5a3c 2f70 726f  3T13:13:43Z</pro\n+00000640: 6a65 6374 2e62 7569 6c64 2e6f 7574 7075  ject.build.outpu\n+00000650: 7454 696d 6573 7461 6d70 3e0a 2020 2020  tTimestamp>.    \n+00000660: 3c2f 7072 6f70 6572 7469 6573 3e0a 0a20  </properties>.. \n+00000670: 2020 203c 7572 6c3e 6874 7470 3a2f 2f66     <url>http://f\n+00000680: 7573 6573 6f75 7263 652e 6769 7468 7562  usesource.github\n+00000690: 2e69 6f2f 6a61 6e73 693c 2f75 726c 3e0a  .io/jansi</url>.\n+000006a0: 2020 2020 3c69 6e63 6570 7469 6f6e 5965      <inceptionYe\n+000006b0: 6172 3e32 3030 393c 2f69 6e63 6570 7469  ar>2009</incepti\n+000006c0: 6f6e 5965 6172 3e0a 0a20 2020 203c 6973  onYear>..    <is\n+000006d0: 7375 654d 616e 6167 656d 656e 743e 0a20  sueManagement>. \n+000006e0: 2020 2020 2020 203c 7379 7374 656d 3e6a         <system>j\n+000006f0: 6972 613c 2f73 7973 7465 6d3e 0a20 2020  ira</system>.   \n+00000700: 2020 2020 203c 7572 6c3e 6874 7470 733a       <url>https:\n+00000710: 2f2f 6769 7468 7562 2e63 6f6d 2f66 7573  //github.com/fus\n+00000720: 6573 6f75 7263 652f 6a61 6e73 692f 6973  esource/jansi/is\n+00000730: 7375 6573 3c2f 7572 6c3e 0a20 2020 203c  sues</url>.    <\n+00000740: 2f69 7373 7565 4d61 6e61 6765 6d65 6e74  /issueManagement\n+00000750: 3e0a 0a20 2020 203c 6d61 696c 696e 674c  >..    <mailingL\n+00000760: 6973 7473 3e0a 2020 2020 2020 2020 3c6d  ists>.        <m\n+00000770: 6169 6c69 6e67 4c69 7374 3e0a 2020 2020  ailingList>.    \n+00000780: 2020 2020 2020 2020 3c6e 616d 653e 4469          <name>Di\n+00000790: 7363 7573 7369 6f6e 204c 6973 743c 2f6e  scussion List</n\n+000007a0: 616d 653e 0a20 2020 2020 2020 2020 2020  ame>.           \n+000007b0: 203c 6172 6368 6976 653e 6874 7470 3a2f   <archive>http:/\n+000007c0: 2f67 726f 7570 732e 676f 6f67 6c65 2e63  /groups.google.c\n+000007d0: 6f6d 2f67 726f 7570 2f6a 616e 7369 3c2f  om/group/jansi</\n+000007e0: 6172 6368 6976 653e 0a20 2020 2020 2020  archive>.       \n+000007f0: 2020 2020 203c 706f 7374 3e6a 616e 7369       <post>jansi\n+00000800: 2d64 6576 4067 6f6f 676c 6567 726f 7570  -dev@googlegroup\n+00000810: 732e 636f 6d3c 2f70 6f73 743e 0a20 2020  s.com</post>.   \n+00000820: 2020 2020 2020 2020 203c 7375 6273 6372           <subscr\n+00000830: 6962 653e 6a61 6e73 692d 6465 762b 7375  ibe>jansi-dev+su\n+00000840: 6273 6372 6962 6540 676f 6f67 6c65 6772  bscribe@googlegr\n+00000850: 6f75 7073 2e63 6f6d 3c2f 7375 6273 6372  oups.com</subscr\n+00000860: 6962 653e 0a20 2020 2020 2020 2020 2020  ibe>.           \n+00000870: 203c 756e 7375 6273 6372 6962 653e 6a61   <unsubscribe>ja\n+00000880: 6e73 692d 6465 762b 756e 7375 6273 6372  nsi-dev+unsubscr\n+00000890: 6962 6540 676f 6f67 6c65 6772 6f75 7073  ibe@googlegroups\n+000008a0: 2e63 6f6d 3c2f 756e 7375 6273 6372 6962  .com</unsubscrib\n+000008b0: 653e 0a20 2020 2020 2020 203c 2f6d 6169  e>.        </mai\n+000008c0: 6c69 6e67 4c69 7374 3e0a 2020 2020 2020  lingList>.      \n+000008d0: 2020 3c6d 6169 6c69 6e67 4c69 7374 3e0a    <mailingList>.\n+000008e0: 2020 2020 2020 2020 2020 2020 3c6e 616d              <nam\n+000008f0: 653e 436f 6d6d 6974 7320 616e 6420 4973  e>Commits and Is\n+00000900: 7375 6520 5472 6163 6b65 7220 4c69 7374  sue Tracker List\n+00000910: 3c2f 6e61 6d65 3e0a 2020 2020 2020 2020  </name>.        \n+00000920: 2020 2020 3c61 7263 6869 7665 3e68 7474      <archive>htt\n+00000930: 703a 2f2f 6772 6f75 7073 2e67 6f6f 676c  p://groups.googl\n+00000940: 652e 636f 6d2f 6772 6f75 702f 6a61 6e73  e.com/group/jans\n+00000950: 692d 636f 6d6d 6974 733c 2f61 7263 6869  i-commits</archi\n+00000960: 7665 3e0a 2020 2020 2020 2020 2020 2020  ve>.            \n+00000970: 3c70 6f73 743e 6a61 6e73 692d 636f 6d6d  <post>jansi-comm\n+00000980: 6974 7340 676f 6f67 6c65 6772 6f75 7073  its@googlegroups\n+00000990: 2e63 6f6d 3c2f 706f 7374 3e0a 2020 2020  .com</post>.    \n+000009a0: 2020 2020 2020 2020 3c73 7562 7363 7269          <subscri\n+000009b0: 6265 3e6a 616e 7369 2d63 6f6d 6d69 7473  be>jansi-commits\n+000009c0: 2b73 7562 7363 7269 6265 4067 6f6f 676c  +subscribe@googl\n+000009d0: 6567 726f 7570 732e 636f 6d3c 2f73 7562  egroups.com</sub\n+000009e0: 7363 7269 6265 3e0a 2020 2020 2020 2020  scribe>.        \n+000009f0: 2020 2020 3c75 6e73 7562 7363 7269 6265      <unsubscribe\n+00000a00: 3e6a 616e 7369 2d63 6f6d 6d69 736f 7473  >jansi-commisots\n+00000a10: 2b75 6e73 7562 7363 7269 6265 4067 6f6f  +unsubscribe@goo\n+00000a20: 676c 6567 726f 7570 732e 636f 6d3c 2f75  glegroups.com</u\n+00000a30: 6e73 7562 7363 7269 6265 3e0a 2020 2020  nsubscribe>.    \n+00000a40: 2020 2020 3c2f 6d61 696c 696e 674c 6973      </mailingLis\n+00000a50: 743e 0a20 2020 203c 2f6d 6169 6c69 6e67  t>.    </mailing\n+00000a60: 4c69 7374 733e 0a0a 2020 2020 3c6c 6963  Lists>..    <lic\n+00000a70: 656e 7365 733e 0a20 2020 2020 2020 203c  enses>.        <\n+00000a80: 6c69 6365 6e73 653e 0a20 2020 2020 2020  license>.       \n+00000a90: 2020 2020 203c 6e61 6d65 3e54 6865 2041       <name>The A\n+00000aa0: 7061 6368 6520 536f 6674 7761 7265 204c  pache Software L\n+00000ab0: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n+00000ac0: 322e 303c 2f6e 616d 653e 0a20 2020 2020  2.0</name>.     \n+00000ad0: 2020 2020 2020 203c 7572 6c3e 6874 7470         <url>http\n+00000ae0: 3a2f 2f77 7777 2e61 7061 6368 652e 6f72  ://www.apache.or\n+00000af0: 672f 6c69 6365 6e73 6573 2f4c 4943 454e  g/licenses/LICEN\n+00000b00: 5345 2d32 2e30 2e74 7874 3c2f 7572 6c3e  SE-2.0.txt</url>\n+00000b10: 0a20 2020 2020 2020 2020 2020 203c 6469  .            <di\n+00000b20: 7374 7269 6275 7469 6f6e 3e72 6570 6f3c  stribution>repo<\n+00000b30: 2f64 6973 7472 6962 7574 696f 6e3e 0a20  /distribution>. \n+00000b40: 2020 2020 2020 203c 2f6c 6963 656e 7365         </license\n+00000b50: 3e0a 2020 2020 3c2f 6c69 6365 6e73 6573  >.    </licenses\n+00000b60: 3e0a 0a20 2020 203c 7363 6d3e 0a20 2020  >..    <scm>.   \n+00000b70: 2020 2020 203c 7572 6c3e 6874 7470 733a       <url>https:\n+00000b80: 2f2f 6769 7468 7562 2e63 6f6d 2f66 7573  //github.com/fus\n+00000b90: 6573 6f75 7263 652f 6a61 6e73 693c 2f75  esource/jansi</u\n+00000ba0: 726c 3e0a 2020 2020 2020 2020 3c63 6f6e  rl>.        <con\n+00000bb0: 6e65 6374 696f 6e3e 7363 6d3a 6769 743a  nection>scm:git:\n+00000bc0: 6769 743a 2f2f 6769 7468 7562 2e63 6f6d  git://github.com\n+00000bd0: 2f66 7573 6573 6f75 7263 652f 6a61 6e73  /fusesource/jans\n+00000be0: 692e 6769 743c 2f63 6f6e 6e65 6374 696f  i.git</connectio\n+00000bf0: 6e3e 0a20 2020 2020 2020 203c 6465 7665  n>.        <deve\n+00000c00: 6c6f 7065 7243 6f6e 6e65 6374 696f 6e3e  loperConnection>\n+00000c10: 7363 6d3a 6769 743a 7373 683a 2f2f 6769  scm:git:ssh://gi\n+00000c20: 7440 6769 7468 7562 2e63 6f6d 2f66 7573  t@github.com/fus\n+00000c30: 6573 6f75 7263 652f 6a61 6e73 692e 6769  esource/jansi.gi\n+00000c40: 743c 2f64 6576 656c 6f70 6572 436f 6e6e  t</developerConn\n+00000c50: 6563 7469 6f6e 3e0a 2020 2020 2020 3c74  ection>.      <t\n+00000c60: 6167 3e6a 616e 7369 2d32 2e33 2e34 3c2f  ag>jansi-2.3.4</\n+00000c70: 7461 673e 0a20 203c 2f73 636d 3e0a 0a20  tag>.  </scm>.. \n+00000c80: 2020 203c 6469 7374 7269 6275 7469 6f6e     <distribution\n+00000c90: 4d61 6e61 6765 6d65 6e74 3e0a 2020 2020  Management>.    \n+00000ca0: 2020 2020 3c72 6570 6f73 6974 6f72 793e      <repository>\n+00000cb0: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n+00000cc0: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n+00000cd0: 7374 6167 696e 673c 2f69 643e 0a20 2020  staging</id>.   \n+00000ce0: 2020 2020 2020 2020 203c 6e61 6d65 3e53           <name>S\n+00000cf0: 6f6e 6174 7970 6520 5374 6167 696e 6720  onatype Staging \n+00000d00: 5265 706f 7369 746f 7279 3c2f 6e61 6d65  Repository</name\n+00000d10: 3e0a 2020 2020 2020 2020 2020 2020 3c75  >.            <u\n+00000d20: 726c 3e68 7474 7073 3a2f 2f6f 7373 2e73  rl>https://oss.s\n+00000d30: 6f6e 6174 7970 652e 6f72 672f 7365 7276  onatype.org/serv\n+00000d40: 6963 652f 6c6f 6361 6c2f 7374 6167 696e  ice/local/stagin\n+00000d50: 672f 6465 706c 6f79 2f6d 6176 656e 323c  g/deploy/maven2<\n+00000d60: 2f75 726c 3e0a 2020 2020 2020 2020 3c2f  /url>.        </\n+00000d70: 7265 706f 7369 746f 7279 3e0a 2020 2020  repository>.    \n+00000d80: 2020 2020 3c73 6e61 7073 686f 7452 6570      <snapshotRep\n+00000d90: 6f73 6974 6f72 793e 0a20 2020 2020 2020  ository>.       \n+00000da0: 2020 2020 203c 6964 3e73 6f6e 6174 7970       <id>sonatyp\n+00000db0: 652d 6e65 7875 732d 736e 6170 7368 6f74  e-nexus-snapshot\n+00000dc0: 733c 2f69 643e 0a20 2020 2020 2020 2020  s</id>.         \n+00000dd0: 2020 203c 6e61 6d65 3e53 6f6e 6174 7970     <name>Sonatyp\n+00000de0: 6520 536e 6170 7368 6f74 2052 6570 6f73  e Snapshot Repos\n+00000df0: 6974 6f72 793c 2f6e 616d 653e 0a20 2020  itory</name>.   \n+00000e00: 2020 2020 2020 2020 203c 7572 6c3e 6874           <url>ht\n+00000e10: 7470 733a 2f2f 6f73 732e 736f 6e61 7479  tps://oss.sonaty\n+00000e20: 7065 2e6f 7267 2f63 6f6e 7465 6e74 2f72  pe.org/content/r\n+00000e30: 6570 6f73 6974 6f72 6965 732f 736e 6170  epositories/snap\n+00000e40: 7368 6f74 733c 2f75 726c 3e0a 2020 2020  shots</url>.    \n+00000e50: 2020 2020 3c2f 736e 6170 7368 6f74 5265      </snapshotRe\n+00000e60: 706f 7369 746f 7279 3e0a 2020 2020 3c2f  pository>.    </\n+00000e70: 6469 7374 7269 6275 7469 6f6e 4d61 6e61  distributionMana\n+00000e80: 6765 6d65 6e74 3e0a 0a20 2020 203c 7265  gement>..    <re\n+00000e90: 706f 7369 746f 7269 6573 3e0a 2020 2020  positories>.    \n+00000ea0: 2020 2020 3c72 6570 6f73 6974 6f72 793e      <repository>\n+00000eb0: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n+00000ec0: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n+00000ed0: 736e 6170 7368 6f74 733c 2f69 643e 0a20  snapshots</id>. \n+00000ee0: 2020 2020 2020 2020 2020 203c 6e61 6d65             <name\n+00000ef0: 3e53 6f6e 6174 7970 6520 536e 6170 7368  >Sonatype Snapsh\n+00000f00: 6f74 2052 6570 6f73 6974 6f72 793c 2f6e  ot Repository</n\n+00000f10: 616d 653e 0a20 2020 2020 2020 2020 2020  ame>.           \n+00000f20: 203c 7572 6c3e 6874 7470 733a 2f2f 6f73   <url>https://os\n+00000f30: 732e 736f 6e61 7479 7065 2e6f 7267 2f63  s.sonatype.org/c\n+00000f40: 6f6e 7465 6e74 2f72 6570 6f73 6974 6f72  ontent/repositor\n+00000f50: 6965 732f 736e 6170 7368 6f74 733c 2f75  ies/snapshots</u\n+00000f60: 726c 3e0a 2020 2020 2020 2020 2020 2020  rl>.            \n+00000f70: 3c73 6e61 7073 686f 7473 3e0a 2020 2020  <snapshots>.    \n+00000f80: 2020 2020 2020 2020 2020 2020 3c65 6e61              <ena\n+00000f90: 626c 6564 3e74 7275 653c 2f65 6e61 626c  bled>true</enabl\n+00000fa0: 6564 3e0a 2020 2020 2020 2020 2020 2020  ed>.            \n+00000fb0: 3c2f 736e 6170 7368 6f74 733e 0a20 2020  </snapshots>.   \n+00000fc0: 2020 2020 203c 2f72 6570 6f73 6974 6f72       </repositor\n+00000fd0: 793e 0a20 2020 203c 2f72 6570 6f73 6974  y>.    </reposit\n+00000fe0: 6f72 6965 733e 0a0a 2020 2020 3c64 6576  ories>..    <dev\n+00000ff0: 656c 6f70 6572 733e 0a20 2020 2020 2020  elopers>.       \n+00001000: 203c 6465 7665 6c6f 7065 723e 0a20 2020   <developer>.   \n+00001010: 2020 2020 2020 2020 203c 6964 3e63 6869           <id>chi\n+00001020: 7269 6e6f 3c2f 6964 3e0a 2020 2020 2020  rino</id>.      \n+00001030: 2020 2020 2020 3c6e 616d 653e 4869 7261        <name>Hira\n+00001040: 6d20 4368 6972 696e 6f3c 2f6e 616d 653e  m Chirino</name>\n+00001050: 0a20 2020 2020 2020 2020 2020 203c 656d  .            <em\n+00001060: 6169 6c3e 6869 7261 6d40 6869 7261 6d63  ail>hiram@hiramc\n+00001070: 6869 7269 6e6f 2e63 6f6d 3c2f 656d 6169  hirino.com</emai\n+00001080: 6c3e 0a20 2020 2020 2020 2020 2020 203c  l>.            <\n+00001090: 7572 6c3e 6874 7470 3a2f 2f68 6972 616d  url>http://hiram\n+000010a0: 6368 6972 696e 6f2e 636f 6d3c 2f75 726c  chirino.com</url\n+000010b0: 3e0a 2020 2020 2020 2020 2020 2020 3c74  >.            <t\n+000010c0: 696d 657a 6f6e 653e 474d 542d 353c 2f74  imezone>GMT-5</t\n+000010d0: 696d 657a 6f6e 653e 0a20 2020 2020 2020  imezone>.       \n+000010e0: 203c 2f64 6576 656c 6f70 6572 3e0a 2020   </developer>.  \n+000010f0: 2020 2020 2020 3c64 6576 656c 6f70 6572        <developer\n+00001100: 3e0a 2020 2020 2020 2020 2020 2020 3c69  >.            <i\n+00001110: 643e 676e 6f64 6574 3c2f 6964 3e0a 2020  d>gnodet</id>.  \n+00001120: 2020 2020 2020 2020 2020 3c6e 616d 653e            <name>\n+00001130: 4775 696c 6c61 756d 6520 4e6f 6465 743c  Guillaume Nodet<\n+00001140: 2f6e 616d 653e 0a20 2020 2020 2020 2020  /name>.         \n+00001150: 2020 203c 656d 6169 6c3e 676e 6f64 6574     <email>gnodet\n+00001160: 4067 6d61 696c 2e63 6f6d 3c2f 656d 6169  @gmail.com</emai\n+00001170: 6c3e 0a20 2020 2020 2020 2020 2020 203c  l>.            <\n+00001180: 7469 6d65 7a6f 6e65 3e47 4d54 2b31 3c2f  timezone>GMT+1</\n+00001190: 7469 6d65 7a6f 6e65 3e0a 2020 2020 2020  timezone>.      \n+000011a0: 2020 3c2f 6465 7665 6c6f 7065 723e 0a20    </developer>. \n+000011b0: 2020 203c 2f64 6576 656c 6f70 6572 733e     </developers>\n+000011c0: 0a0a 2020 2020 3c62 7569 6c64 3e0a 2020  ..    <build>.  \n+000011d0: 2020 2020 2020 3c65 7874 656e 7369 6f6e        <extension\n+000011e0: 733e 0a20 2020 2020 2020 2020 2020 203c  s>.            <\n+000011f0: 6578 7465 6e73 696f 6e3e 0a20 2020 2020  extension>.     \n+00001200: 2020 2020 2020 2020 2020 203c 6772 6f75             <grou\n+00001210: 7049 643e 6f72 672e 6675 7365 736f 7572  pId>org.fusesour\n+00001220: 6365 2e6d 766e 706c 7567 696e 733c 2f67  ce.mvnplugins</g\n+00001230: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00001240: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00001250: 7449 643e 6675 7365 2d6a 7872 2d73 6b69  tId>fuse-jxr-ski\n+00001260: 6e3c 2f61 7274 6966 6163 7449 643e 0a20  n</artifactId>. \n+00001270: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00001280: 7665 7273 696f 6e3e 312e 393c 2f76 6572  version>1.9</ver\n+00001290: 7369 6f6e 3e0a 2020 2020 2020 2020 2020  sion>.          \n+000012a0: 2020 3c2f 6578 7465 6e73 696f 6e3e 0a20    </extension>. \n+000012b0: 2020 2020 2020 203c 2f65 7874 656e 7369         </extensi\n+000012c0: 6f6e 733e 0a0a 2020 2020 2020 2020 3c72  ons>..        <r\n+000012d0: 6573 6f75 7263 6573 3e0a 2020 2020 2020  esources>.      \n+000012e0: 2020 2020 2020 3c72 6573 6f75 7263 653e        <resource>\n+000012f0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00001300: 203c 6469 7265 6374 6f72 793e 7372 632f   <directory>src/\n+00001310: 6d61 696e 2f72 6573 6f75 7263 6573 3c2f  main/resources</\n+00001320: 6469 7265 6374 6f72 793e 0a20 2020 2020  directory>.     \n+00001330: 2020 2020 2020 2020 2020 203c 6669 6c74             <filt\n+00001340: 6572 696e 673e 7472 7565 3c2f 6669 6c74  ering>true</filt\n+00001350: 6572 696e 673e 0a20 2020 2020 2020 2020  ering>.         \n+00001360: 2020 2020 2020 203c 696e 636c 7564 6573         <includes\n+00001370: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00001380: 2020 2020 2020 3c69 6e63 6c75 6465 3e2a        <include>*\n+00001390: 2a2f 2a2e 7072 6f70 6572 7469 6573 3c2f  */*.properties</\n+000013a0: 696e 636c 7564 653e 0a20 2020 2020 2020  include>.       \n+000013b0: 2020 2020 2020 2020 203c 2f69 6e63 6c75           </inclu\n+000013c0: 6465 733e 0a20 2020 2020 2020 2020 2020  des>.           \n+000013d0: 203c 2f72 6573 6f75 7263 653e 0a20 2020   </resource>.   \n+000013e0: 2020 2020 2020 2020 203c 7265 736f 7572           <resour\n+000013f0: 6365 3e0a 2020 2020 2020 2020 2020 2020  ce>.            \n+00001400: 2020 2020 3c64 6972 6563 746f 7279 3e73      <directory>s\n+00001410: 7263 2f6d 6169 6e2f 7265 736f 7572 6365  rc/main/resource\n+00001420: 733c 2f64 6972 6563 746f 7279 3e0a 2020  s</directory>.  \n+00001430: 2020 2020 2020 2020 2020 2020 2020 3c66                <f\n+00001440: 696c 7465 7269 6e67 3e66 616c 7365 3c2f  iltering>false</\n+00001450: 6669 6c74 6572 696e 673e 0a20 2020 2020  filtering>.     \n+00001460: 2020 2020 2020 2020 2020 203c 6578 636c             <excl\n+00001470: 7564 6573 3e0a 2020 2020 2020 2020 2020  udes>.          \n+00001480: 2020 2020 2020 2020 2020 3c65 7863 6c75            <exclu\n+00001490: 6465 3e2a 2a2f 2a2e 7072 6f70 6572 7469  de>**/*.properti\n+000014a0: 6573 3c2f 6578 636c 7564 653e 0a20 2020  es</exclude>.   \n+000014b0: 2020 2020 2020 2020 2020 2020 203c 2f65               </e\n+000014c0: 7863 6c75 6465 733e 0a20 2020 2020 2020  xcludes>.       \n+000014d0: 2020 2020 203c 2f72 6573 6f75 7263 653e       </resource>\n+000014e0: 0a20 2020 2020 2020 203c 2f72 6573 6f75  .        </resou\n+000014f0: 7263 6573 3e0a 0a20 2020 2020 2020 203c  rces>..        <\n+00001500: 706c 7567 696e 733e 0a20 2020 2020 2020  plugins>.       \n+00001510: 2020 2020 203c 706c 7567 696e 3e0a 2020       <plugin>.  \n+00001520: 2020 2020 2020 2020 2020 2020 2020 3c67                <g\n+00001530: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n+00001540: 652e 6d61 7665 6e2e 706c 7567 696e 733c  e.maven.plugins<\n+00001550: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+00001560: 2020 2020 2020 2020 2020 3c61 7274 6966            <artif\n+00001570: 6163 7449 643e 6d61 7665 6e2d 636f 6d70  actId>maven-comp\n+00001580: 696c 6572 2d70 6c75 6769 6e3c 2f61 7274  iler-plugin</art\n+00001590: 6966 6163 7449 643e 0a20 2020 2020 2020  ifactId>.       \n+000015a0: 2020 2020 2020 2020 203c 7665 7273 696f           <versio\n+000015b0: 6e3e 332e 382e 313c 2f76 6572 7369 6f6e  n>3.8.1</version\n+000015c0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000015d0: 2020 3c63 6f6e 6669 6775 7261 7469 6f6e    <configuration\n+000015e0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000015f0: 2020 2020 2020 3c21 2d2d 2070 6172 656e        <!-- paren\n+00001600: 7420 706f 6d20 312e 3131 2066 6f72 6365  t pom 1.11 force\n+00001610: 7320 7665 7273 696f 6e20 696e 7374 6561  s version instea\n+00001620: 6420 6f66 2075 7369 6e67 2070 726f 7065  d of using prope\n+00001630: 7274 7920 2d2d 3e0a 2020 2020 2020 2020  rty -->.        \n+00001640: 2020 2020 2020 2020 2020 2020 3c73 6f75              <sou\n+00001650: 7263 653e 247b 6a64 6b54 6172 6765 747d  rce>${jdkTarget}\n+00001660: 3c2f 736f 7572 6365 3e0a 2020 2020 2020  </source>.      \n+00001670: 2020 2020 2020 2020 2020 2020 2020 3c74                <t\n+00001680: 6172 6765 743e 247b 6a64 6b54 6172 6765  arget>${jdkTarge\n+00001690: 747d 3c2f 7461 7267 6574 3e0a 2020 2020  t}</target>.    \n+000016a0: 2020 2020 2020 2020 2020 2020 3c2f 636f              </co\n+000016b0: 6e66 6967 7572 6174 696f 6e3e 0a20 2020  nfiguration>.   \n+000016c0: 2020 2020 2020 2020 203c 2f70 6c75 6769           </plugi\n+000016d0: 6e3e 0a20 2020 2020 2020 2020 2020 203c  n>.            <\n+000016e0: 706c 7567 696e 3e0a 2020 2020 2020 2020  plugin>.        \n+000016f0: 2020 2020 2020 2020 3c67 726f 7570 4964          <groupId\n+00001700: 3e6f 7267 2e61 7061 6368 652e 6665 6c69  >org.apache.feli\n+00001710: 783c 2f67 726f 7570 4964 3e0a 2020 2020  x</groupId>.    \n+00001720: 2020 2020 2020 2020 2020 2020 3c61 7274              <art\n+00001730: 6966 6163 7449 643e 6d61 7665 6e2d 6275  ifactId>maven-bu\n+00001740: 6e64 6c65 2d70 6c75 6769 6e3c 2f61 7274  ndle-plugin</art\n+00001750: 6966 6163 7449 643e 0a20 2020 2020 2020  ifactId>.       \n+00001760: 2020 2020 2020 2020 203c 7665 7273 696f           <versio\n+00001770: 6e3e 352e 312e 313c 2f76 6572 7369 6f6e  n>5.1.1</version\n+00001780: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00001790: 2020 3c65 7865 6375 7469 6f6e 733e 0a20    <executions>. \n+000017a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000017b0: 2020 203c 6578 6563 7574 696f 6e3e 0a20     <execution>. \n+000017c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000017d0: 2020 2020 2020 203c 6964 3e62 756e 646c         <id>bundl\n+000017e0: 652d 6d61 6e69 6665 7374 3c2f 6964 3e0a  e-manifest</id>.\n+000017f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001800: 2020 2020 2020 2020 3c70 6861 7365 3e70          <phase>p\n+00001810: 726f 6365 7373 2d63 6c61 7373 6573 3c2f  rocess-classes</\n+00001820: 7068 6173 653e 0a20 2020 2020 2020 2020  phase>.         \n+00001830: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00001840: 676f 616c 733e 0a20 2020 2020 2020 2020  goals>.         \n+00001850: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001860: 2020 203c 676f 616c 3e6d 616e 6966 6573     <goal>manifes\n+00001870: 743c 2f67 6f61 6c3e 0a20 2020 2020 2020  t</goal>.       \n+00001880: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001890: 203c 2f67 6f61 6c73 3e0a 2020 2020 2020   </goals>.      \n+000018a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000018b0: 2020 3c63 6f6e 6669 6775 7261 7469 6f6e    <configuration\n+000018c0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000018d0: 2020 2020 2020 2020 2020 2020 2020 3c69                <i\n+000018e0: 6e73 7472 7563 7469 6f6e 733e 0a20 2020  nstructions>.   \n 000018f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001900: 2020 2020 2020 2020 2020 3c67 6f61 6c3e            <goal>\n-00001910: 6d61 6e69 6665 7374 3c2f 676f 616c 3e0d  manifest</goal>.\n-00001920: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001930: 2020 2020 2020 2020 203c 2f67 6f61 6c73           </goals\n-00001940: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00001950: 2020 2020 2020 2020 2020 203c 636f 6e66             <conf\n-00001960: 6967 7572 6174 696f 6e3e 0d0a 2020 2020  iguration>..    \n-00001970: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001980: 2020 2020 2020 2020 3c69 6e73 7472 7563          <instruc\n-00001990: 7469 6f6e 733e 0d0a 2020 2020 2020 2020  tions>..        \n-000019a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000019b0: 2020 2020 2020 2020 3c4d 6169 6e2d 436c          <Main-Cl\n-000019c0: 6173 733e 6f72 672e 6675 7365 736f 7572  ass>org.fusesour\n-000019d0: 6365 2e6a 616e 7369 2e41 6e73 694d 6169  ce.jansi.AnsiMai\n-000019e0: 6e3c 2f4d 6169 6e2d 436c 6173 733e 0d0a  n</Main-Class>..\n-000019f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001900: 2020 2020 2020 2020 2020 2020 203c 4d61               <Ma\n+00001910: 696e 2d43 6c61 7373 3e6f 7267 2e66 7573  in-Class>org.fus\n+00001920: 6573 6f75 7263 652e 6a61 6e73 692e 416e  esource.jansi.An\n+00001930: 7369 4d61 696e 3c2f 4d61 696e 2d43 6c61  siMain</Main-Cla\n+00001940: 7373 3e0a 2020 2020 2020 2020 2020 2020  ss>.            \n+00001950: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001960: 2020 2020 3c45 7870 6f72 742d 5061 636b      <Export-Pack\n+00001970: 6167 653e 0a20 2020 2020 2020 2020 2020  age>.           \n+00001980: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001990: 2020 2020 2020 2020 2021 6f72 672e 6675           !org.fu\n+000019a0: 7365 736f 7572 6365 2e6a 616e 7369 2e69  sesource.jansi.i\n+000019b0: 6e74 6572 6e61 6c2e 6e61 7469 7665 2e2a  nternal.native.*\n+000019c0: 3b0a 2020 2020 2020 2020 2020 2020 2020  ;.              \n+000019d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000019e0: 2020 2020 2020 6f72 672e 6675 7365 736f        org.fuseso\n+000019f0: 7572 6365 2e6a 616e 7369 2e2a 3b0a 2020  urce.jansi.*;.  \n 00001a00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a10: 3c45 7870 6f72 742d 5061 636b 6167 653e  <Export-Package>\n-00001a20: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00001a30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a40: 2020 2020 2020 216f 7267 2e66 7573 6573        !org.fuses\n-00001a50: 6f75 7263 652e 6a61 6e73 692e 696e 7465  ource.jansi.inte\n-00001a60: 726e 616c 2e6e 6174 6976 652e 2a3b 0d0a  rnal.native.*;..\n+00001a10: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001a20: 2020 2d6e 6f69 6d70 6f72 743a 3d74 7275    -noimport:=tru\n+00001a30: 650a 2020 2020 2020 2020 2020 2020 2020  e.              \n+00001a40: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001a50: 2020 3c2f 4578 706f 7274 2d50 6163 6b61    </Export-Packa\n+00001a60: 6765 3e0a 2020 2020 2020 2020 2020 2020  ge>.            \n 00001a70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a80: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a90: 2020 2020 6f72 672e 6675 7365 736f 7572      org.fusesour\n-00001aa0: 6365 2e6a 616e 7369 2e2a 3b0d 0a20 2020  ce.jansi.*;..   \n-00001ab0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001ac0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001ad0: 202d 6e6f 696d 706f 7274 3a3d 7472 7565   -noimport:=true\n-00001ae0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n+00001a80: 2020 2020 3c5f 7265 6d6f 7665 6865 6164      <_removehead\n+00001a90: 6572 733e 426e 642d 4c61 7374 4d6f 6469  ers>Bnd-LastModi\n+00001aa0: 6669 6564 2c49 6e63 6c75 6465 2d52 6573  fied,Include-Res\n+00001ab0: 6f75 7263 652c 5072 6976 6174 652d 5061  ource,Private-Pa\n+00001ac0: 636b 6167 652c 4f72 6967 696e 616c 6c79  ckage,Originally\n+00001ad0: 2d43 7265 6174 6564 2d42 793c 2f5f 7265  -Created-By</_re\n+00001ae0: 6d6f 7665 6865 6164 6572 733e 0a20 2020  moveheaders>.   \n 00001af0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001b00: 2020 3c2f 4578 706f 7274 2d50 6163 6b61    </Export-Packa\n-00001b10: 6765 3e0d 0a20 2020 2020 2020 2020 2020  ge>..           \n-00001b20: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001b30: 2020 2020 203c 5f72 656d 6f76 6568 6561       <_removehea\n-00001b40: 6465 7273 3e42 6e64 2d4c 6173 744d 6f64  ders>Bnd-LastMod\n-00001b50: 6966 6965 642c 496e 636c 7564 652d 5265  ified,Include-Re\n-00001b60: 736f 7572 6365 2c50 7269 7661 7465 2d50  source,Private-P\n-00001b70: 6163 6b61 6765 2c4f 7269 6769 6e61 6c6c  ackage,Originall\n-00001b80: 792d 4372 6561 7465 642d 4279 3c2f 5f72  y-Created-By</_r\n-00001b90: 656d 6f76 6568 6561 6465 7273 3e0d 0a20  emoveheaders>.. \n-00001ba0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001bb0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001bc0: 5f72 6570 726f 6475 6369 626c 653e 7472  _reproducible>tr\n-00001bd0: 7565 3c2f 5f72 6570 726f 6475 6369 626c  ue</_reproducibl\n-00001be0: 653e 0d0a 2020 2020 2020 2020 2020 2020  e>..            \n+00001b00: 2020 2020 2020 2020 2020 2020 203c 5f72               <_r\n+00001b10: 6570 726f 6475 6369 626c 653e 7472 7565  eproducible>true\n+00001b20: 3c2f 5f72 6570 726f 6475 6369 626c 653e  </_reproducible>\n+00001b30: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00001b40: 2020 2020 2020 2020 2020 2020 203c 2f69               </i\n+00001b50: 6e73 7472 7563 7469 6f6e 733e 0a20 2020  nstructions>.   \n+00001b60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001b70: 2020 2020 203c 2f63 6f6e 6669 6775 7261       </configura\n+00001b80: 7469 6f6e 3e0a 2020 2020 2020 2020 2020  tion>.          \n+00001b90: 2020 2020 2020 2020 2020 3c2f 6578 6563            </exec\n+00001ba0: 7574 696f 6e3e 0a20 2020 2020 2020 2020  ution>.         \n+00001bb0: 2020 2020 2020 203c 2f65 7865 6375 7469         </executi\n+00001bc0: 6f6e 733e 0a20 2020 2020 2020 2020 2020  ons>.           \n+00001bd0: 203c 2f70 6c75 6769 6e3e 0a20 2020 2020   </plugin>.     \n+00001be0: 2020 2020 2020 203c 706c 7567 696e 3e0a         <plugin>.\n 00001bf0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001c00: 3c2f 696e 7374 7275 6374 696f 6e73 3e0d  </instructions>.\n-00001c10: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001c20: 2020 2020 2020 2020 203c 2f63 6f6e 6669           </confi\n-00001c30: 6775 7261 7469 6f6e 3e0d 0a20 2020 2020  guration>..     \n-00001c40: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001c50: 2f65 7865 6375 7469 6f6e 3e0d 0a20 2020  /execution>..   \n-00001c60: 2020 2020 2020 2020 2020 2020 203c 2f65               </e\n-00001c70: 7865 6375 7469 6f6e 733e 0d0a 2020 2020  xecutions>..    \n-00001c80: 2020 2020 2020 2020 3c2f 706c 7567 696e          </plugin\n-00001c90: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00001ca0: 706c 7567 696e 3e0d 0a20 2020 2020 2020  plugin>..       \n-00001cb0: 2020 2020 2020 2020 203c 6772 6f75 7049           <groupI\n-00001cc0: 643e 6f72 672e 636f 6465 6861 7573 2e6d  d>org.codehaus.m\n-00001cd0: 6f6a 6f3c 2f67 726f 7570 4964 3e0d 0a20  ojo</groupId>.. \n-00001ce0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001cf0: 6172 7469 6661 6374 4964 3e65 7865 632d  artifactId>exec-\n-00001d00: 6d61 7665 6e2d 706c 7567 696e 3c2f 6172  maven-plugin</ar\n-00001d10: 7469 6661 6374 4964 3e0d 0a20 2020 2020  tifactId>..     \n-00001d20: 2020 2020 2020 2020 2020 203c 7665 7273             <vers\n-00001d30: 696f 6e3e 332e 302e 303c 2f76 6572 7369  ion>3.0.0</versi\n-00001d40: 6f6e 3e0d 0a20 2020 2020 2020 2020 2020  on>..           \n-00001d50: 2020 2020 203c 6578 6563 7574 696f 6e73       <executions\n-00001d60: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00001d70: 2020 2020 2020 203c 6578 6563 7574 696f         <executio\n-00001d80: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00001d90: 2020 2020 2020 2020 2020 2020 3c69 643e              <id>\n-00001da0: 6765 6e65 7261 7465 2d67 7261 616c 766d  generate-graalvm\n-00001db0: 2d69 6e66 6f3c 2f69 643e 0d0a 2020 2020  -info</id>..    \n-00001dc0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001dd0: 2020 2020 3c70 6861 7365 3e70 726f 6365      <phase>proce\n-00001de0: 7373 2d63 6c61 7373 6573 3c2f 7068 6173  ss-classes</phas\n-00001df0: 653e 0d0a 2020 2020 2020 2020 2020 2020  e>..            \n-00001e00: 2020 2020 2020 2020 2020 2020 3c67 6f61              <goa\n-00001e10: 6c73 3e0d 0a20 2020 2020 2020 2020 2020  ls>..           \n-00001e20: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001e30: 203c 676f 616c 3e6a 6176 613c 2f67 6f61   <goal>java</goa\n-00001e40: 6c3e 0d0a 2020 2020 2020 2020 2020 2020  l>..            \n-00001e50: 2020 2020 2020 2020 2020 2020 3c2f 676f              </go\n-00001e60: 616c 733e 0d0a 2020 2020 2020 2020 2020  als>..          \n-00001e70: 2020 2020 2020 2020 2020 2020 2020 3c63                <c\n-00001e80: 6f6e 6669 6775 7261 7469 6f6e 3e0d 0a20  onfiguration>.. \n-00001e90: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001ea0: 2020 2020 2020 2020 2020 203c 696e 636c             <incl\n-00001eb0: 7564 6550 726f 6a65 6374 4465 7065 6e64  udeProjectDepend\n-00001ec0: 656e 6369 6573 3e74 7275 653c 2f69 6e63  encies>true</inc\n-00001ed0: 6c75 6465 5072 6f6a 6563 7444 6570 656e  ludeProjectDepen\n-00001ee0: 6465 6e63 6965 733e 0d0a 2020 2020 2020  dencies>..      \n-00001ef0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001f00: 2020 2020 2020 3c63 6c61 7373 7061 7468        <classpath\n-00001f10: 5363 6f70 653e 7465 7374 3c2f 636c 6173  Scope>test</clas\n-00001f20: 7370 6174 6853 636f 7065 3e0d 0a20 2020  spathScope>..   \n-00001f30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001f40: 2020 2020 2020 2020 203c 6578 6563 7574           <execut\n-00001f50: 6162 6c65 4465 7065 6e64 656e 6379 3e0d  ableDependency>.\n-00001f60: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001f70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001f80: 203c 6772 6f75 7049 643e 696e 666f 2e70   <groupId>info.p\n-00001f90: 6963 6f63 6c69 3c2f 6772 6f75 7049 643e  icocli</groupId>\n-00001fa0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00001fb0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001fc0: 2020 3c61 7274 6966 6163 7449 643e 7069    <artifactId>pi\n-00001fd0: 636f 636c 692d 636f 6465 6765 6e3c 2f61  cocli-codegen</a\n-00001fe0: 7274 6966 6163 7449 643e 0d0a 2020 2020  rtifactId>..    \n+00001c00: 3c67 726f 7570 4964 3e6f 7267 2e63 6f64  <groupId>org.cod\n+00001c10: 6568 6175 732e 6d6f 6a6f 3c2f 6772 6f75  ehaus.mojo</grou\n+00001c20: 7049 643e 0a20 2020 2020 2020 2020 2020  pId>.           \n+00001c30: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00001c40: 3e65 7865 632d 6d61 7665 6e2d 706c 7567  >exec-maven-plug\n+00001c50: 696e 3c2f 6172 7469 6661 6374 4964 3e0a  in</artifactId>.\n+00001c60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001c70: 3c76 6572 7369 6f6e 3e33 2e30 2e30 3c2f  <version>3.0.0</\n+00001c80: 7665 7273 696f 6e3e 0a20 2020 2020 2020  version>.       \n+00001c90: 2020 2020 2020 2020 203c 6578 6563 7574           <execut\n+00001ca0: 696f 6e73 3e0a 2020 2020 2020 2020 2020  ions>.          \n+00001cb0: 2020 2020 2020 2020 2020 3c65 7865 6375            <execu\n+00001cc0: 7469 6f6e 3e0a 2020 2020 2020 2020 2020  tion>.          \n+00001cd0: 2020 2020 2020 2020 2020 2020 2020 3c69                <i\n+00001ce0: 643e 6765 6e65 7261 7465 2d67 7261 616c  d>generate-graal\n+00001cf0: 766d 2d69 6e66 6f3c 2f69 643e 0a20 2020  vm-info</id>.   \n+00001d00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001d10: 2020 2020 203c 7068 6173 653e 7072 6f63       <phase>proc\n+00001d20: 6573 732d 636c 6173 7365 733c 2f70 6861  ess-classes</pha\n+00001d30: 7365 3e0a 2020 2020 2020 2020 2020 2020  se>.            \n+00001d40: 2020 2020 2020 2020 2020 2020 3c67 6f61              <goa\n+00001d50: 6c73 3e0a 2020 2020 2020 2020 2020 2020  ls>.            \n+00001d60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001d70: 3c67 6f61 6c3e 6a61 7661 3c2f 676f 616c  <goal>java</goal\n+00001d80: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00001d90: 2020 2020 2020 2020 2020 3c2f 676f 616c            </goal\n+00001da0: 733e 0a20 2020 2020 2020 2020 2020 2020  s>.             \n+00001db0: 2020 2020 2020 2020 2020 203c 636f 6e66             <conf\n+00001dc0: 6967 7572 6174 696f 6e3e 0a20 2020 2020  iguration>.     \n+00001dd0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001de0: 2020 2020 2020 203c 696e 636c 7564 6550         <includeP\n+00001df0: 726f 6a65 6374 4465 7065 6e64 656e 6369  rojectDependenci\n+00001e00: 6573 3e74 7275 653c 2f69 6e63 6c75 6465  es>true</include\n+00001e10: 5072 6f6a 6563 7444 6570 656e 6465 6e63  ProjectDependenc\n+00001e20: 6965 733e 0a20 2020 2020 2020 2020 2020  ies>.           \n+00001e30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001e40: 203c 636c 6173 7370 6174 6853 636f 7065   <classpathScope\n+00001e50: 3e74 6573 743c 2f63 6c61 7373 7061 7468  >test</classpath\n+00001e60: 5363 6f70 653e 0a20 2020 2020 2020 2020  Scope>.         \n+00001e70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001e80: 2020 203c 6578 6563 7574 6162 6c65 4465     <executableDe\n+00001e90: 7065 6e64 656e 6379 3e0a 2020 2020 2020  pendency>.      \n+00001ea0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001eb0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n+00001ec0: 4964 3e69 6e66 6f2e 7069 636f 636c 693c  Id>info.picocli<\n+00001ed0: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+00001ee0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001ef0: 2020 2020 2020 2020 2020 3c61 7274 6966            <artif\n+00001f00: 6163 7449 643e 7069 636f 636c 692d 636f  actId>picocli-co\n+00001f10: 6465 6765 6e3c 2f61 7274 6966 6163 7449  degen</artifactI\n+00001f20: 643e 0a20 2020 2020 2020 2020 2020 2020  d>.             \n+00001f30: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00001f40: 2f65 7865 6375 7461 626c 6544 6570 656e  /executableDepen\n+00001f50: 6465 6e63 793e 0a20 2020 2020 2020 2020  dency>.         \n+00001f60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001f70: 2020 203c 6d61 696e 436c 6173 733e 7069     <mainClass>pi\n+00001f80: 636f 636c 692e 636f 6465 6765 6e2e 616f  cocli.codegen.ao\n+00001f90: 742e 6772 6161 6c76 6d2e 4a6e 6943 6f6e  t.graalvm.JniCon\n+00001fa0: 6669 6747 656e 6572 6174 6f72 3c2f 6d61  figGenerator</ma\n+00001fb0: 696e 436c 6173 733e 0a20 2020 2020 2020  inClass>.       \n+00001fc0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001fd0: 2020 2020 203c 6172 6775 6d65 6e74 733e       <arguments>\n+00001fe0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n 00001ff0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002000: 2020 2020 2020 2020 3c2f 6578 6563 7574          </execut\n-00002010: 6162 6c65 4465 7065 6e64 656e 6379 3e0d  ableDependency>.\n-00002020: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002030: 2020 2020 2020 2020 2020 2020 203c 6d61               <ma\n-00002040: 696e 436c 6173 733e 7069 636f 636c 692e  inClass>picocli.\n-00002050: 636f 6465 6765 6e2e 616f 742e 6772 6161  codegen.aot.graa\n-00002060: 6c76 6d2e 4a6e 6943 6f6e 6669 6747 656e  lvm.JniConfigGen\n-00002070: 6572 6174 6f72 3c2f 6d61 696e 436c 6173  erator</mainClas\n-00002080: 733e 0d0a 2020 2020 2020 2020 2020 2020  s>..            \n-00002090: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000020a0: 3c61 7267 756d 656e 7473 3e0d 0a20 2020  <arguments>..   \n-000020b0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000020c0: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n-000020d0: 6775 6d65 6e74 3e6f 7267 2e66 7573 6573  gument>org.fuses\n-000020e0: 6f75 7263 652e 6a61 6e73 692e 696e 7465  ource.jansi.inte\n-000020f0: 726e 616c 2e43 4c69 6272 6172 793c 2f61  rnal.CLibrary</a\n-00002100: 7267 756d 656e 743e 0d0a 2020 2020 2020  rgument>..      \n+00002000: 203c 6172 6775 6d65 6e74 3e6f 7267 2e66   <argument>org.f\n+00002010: 7573 6573 6f75 7263 652e 6a61 6e73 692e  usesource.jansi.\n+00002020: 696e 7465 726e 616c 2e43 4c69 6272 6172  internal.CLibrar\n+00002030: 793c 2f61 7267 756d 656e 743e 0a20 2020  y</argument>.   \n+00002040: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002050: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n+00002060: 6775 6d65 6e74 3e6f 7267 2e66 7573 6573  gument>org.fuses\n+00002070: 6f75 7263 652e 6a61 6e73 692e 696e 7465  ource.jansi.inte\n+00002080: 726e 616c 2e4b 6572 6e65 6c33 323c 2f61  rnal.Kernel32</a\n+00002090: 7267 756d 656e 743e 0a20 2020 2020 2020  rgument>.       \n+000020a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000020b0: 2020 2020 2020 2020 203c 6172 6775 6d65           <argume\n+000020c0: 6e74 3e2d 6f3d 7461 7267 6574 2f63 6c61  nt>-o=target/cla\n+000020d0: 7373 6573 2f4d 4554 412d 494e 462f 6e61  sses/META-INF/na\n+000020e0: 7469 7665 2d69 6d61 6765 2f6a 616e 7369  tive-image/jansi\n+000020f0: 2f6a 6e69 2d63 6f6e 6669 672e 6a73 6f6e  /jni-config.json\n+00002100: 3c2f 6172 6775 6d65 6e74 3e0a 2020 2020  </argument>.    \n 00002110: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002120: 2020 2020 2020 2020 2020 3c61 7267 756d            <argum\n-00002130: 656e 743e 6f72 672e 6675 7365 736f 7572  ent>org.fusesour\n-00002140: 6365 2e6a 616e 7369 2e69 6e74 6572 6e61  ce.jansi.interna\n-00002150: 6c2e 4b65 726e 656c 3332 3c2f 6172 6775  l.Kernel32</argu\n-00002160: 6d65 6e74 3e0d 0a20 2020 2020 2020 2020  ment>..         \n-00002170: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002180: 2020 2020 2020 203c 6172 6775 6d65 6e74         <argument\n-00002190: 3e2d 6f3d 7461 7267 6574 2f63 6c61 7373  >-o=target/class\n-000021a0: 6573 2f4d 4554 412d 494e 462f 6e61 7469  es/META-INF/nati\n-000021b0: 7665 2d69 6d61 6765 2f6a 616e 7369 2f6a  ve-image/jansi/j\n-000021c0: 6e69 2d63 6f6e 6669 672e 6a73 6f6e 3c2f  ni-config.json</\n-000021d0: 6172 6775 6d65 6e74 3e0d 0a20 2020 2020  argument>..     \n+00002120: 2020 2020 2020 2020 3c2f 6172 6775 6d65          </argume\n+00002130: 6e74 733e 0a20 2020 2020 2020 2020 2020  nts>.           \n+00002140: 2020 2020 2020 2020 2020 2020 203c 2f63               </c\n+00002150: 6f6e 6669 6775 7261 7469 6f6e 3e0a 2020  onfiguration>.  \n+00002160: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002170: 2020 3c2f 6578 6563 7574 696f 6e3e 0a20    </execution>. \n+00002180: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002190: 2f65 7865 6375 7469 6f6e 733e 0a20 2020  /executions>.   \n+000021a0: 2020 2020 2020 2020 2020 2020 203c 6465               <de\n+000021b0: 7065 6e64 656e 6369 6573 3e0a 2020 2020  pendencies>.    \n+000021c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000021d0: 3c64 6570 656e 6465 6e63 793e 0a20 2020  <dependency>.   \n 000021e0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000021f0: 2020 2020 2020 203c 2f61 7267 756d 656e         </argumen\n-00002200: 7473 3e0d 0a20 2020 2020 2020 2020 2020  ts>..           \n-00002210: 2020 2020 2020 2020 2020 2020 203c 2f63               </c\n-00002220: 6f6e 6669 6775 7261 7469 6f6e 3e0d 0a20  onfiguration>.. \n-00002230: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002240: 2020 203c 2f65 7865 6375 7469 6f6e 3e0d     </execution>.\n-00002250: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002260: 203c 2f65 7865 6375 7469 6f6e 733e 0d0a   </executions>..\n-00002270: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002280: 3c64 6570 656e 6465 6e63 6965 733e 0d0a  <dependencies>..\n-00002290: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000022a0: 2020 2020 3c64 6570 656e 6465 6e63 793e      <dependency>\n-000022b0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-000022c0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-000022d0: 4964 3e69 6e66 6f2e 7069 636f 636c 693c  Id>info.picocli<\n-000022e0: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-000022f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002300: 2020 203c 6172 7469 6661 6374 4964 3e70     <artifactId>p\n-00002310: 6963 6f63 6c69 2d63 6f64 6567 656e 3c2f  icocli-codegen</\n-00002320: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n+000021f0: 2020 2020 203c 6772 6f75 7049 643e 696e       <groupId>in\n+00002200: 666f 2e70 6963 6f63 6c69 3c2f 6772 6f75  fo.picocli</grou\n+00002210: 7049 643e 0a20 2020 2020 2020 2020 2020  pId>.           \n+00002220: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n+00002230: 7469 6661 6374 4964 3e70 6963 6f63 6c69  tifactId>picocli\n+00002240: 2d63 6f64 6567 656e 3c2f 6172 7469 6661  -codegen</artifa\n+00002250: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+00002260: 2020 2020 2020 2020 2020 2020 2020 3c76                <v\n+00002270: 6572 7369 6f6e 3e34 2e35 2e32 3c2f 7665  ersion>4.5.2</ve\n+00002280: 7273 696f 6e3e 0a20 2020 2020 2020 2020  rsion>.         \n+00002290: 2020 2020 2020 2020 2020 203c 2f64 6570             </dep\n+000022a0: 656e 6465 6e63 793e 0a20 2020 2020 2020  endency>.       \n+000022b0: 2020 2020 2020 2020 203c 2f64 6570 656e           </depen\n+000022c0: 6465 6e63 6965 733e 0a20 2020 2020 2020  dencies>.       \n+000022d0: 2020 2020 203c 2f70 6c75 6769 6e3e 0a20       </plugin>. \n+000022e0: 2020 2020 2020 2020 2020 203c 706c 7567             <plug\n+000022f0: 696e 3e0a 2020 2020 2020 2020 2020 2020  in>.            \n+00002300: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+00002310: 2e61 7061 6368 652e 6d61 7665 6e2e 706c  .apache.maven.pl\n+00002320: 7567 696e 733c 2f67 726f 7570 4964 3e0a  ugins</groupId>.\n 00002330: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002340: 2020 2020 203c 7665 7273 696f 6e3e 342e       <version>4.\n-00002350: 352e 323c 2f76 6572 7369 6f6e 3e0d 0a20  5.2</version>.. \n-00002360: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002370: 2020 203c 2f64 6570 656e 6465 6e63 793e     </dependency>\n-00002380: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00002390: 2020 3c2f 6465 7065 6e64 656e 6369 6573    </dependencies\n-000023a0: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-000023b0: 2f70 6c75 6769 6e3e 0d0a 2020 2020 2020  /plugin>..      \n-000023c0: 2020 2020 2020 3c70 6c75 6769 6e3e 0d0a        <plugin>..\n-000023d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000023e0: 3c67 726f 7570 4964 3e6f 7267 2e61 7061  <groupId>org.apa\n-000023f0: 6368 652e 6d61 7665 6e2e 706c 7567 696e  che.maven.plugin\n-00002400: 733c 2f67 726f 7570 4964 3e0d 0a20 2020  s</groupId>..   \n-00002410: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n-00002420: 7469 6661 6374 4964 3e6d 6176 656e 2d73  tifactId>maven-s\n-00002430: 7572 6566 6972 652d 706c 7567 696e 3c2f  urefire-plugin</\n-00002440: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n-00002450: 2020 2020 2020 2020 2020 2020 203c 7665               <ve\n-00002460: 7273 696f 6e3e 332e 302e 302d 4d35 3c2f  rsion>3.0.0-M5</\n-00002470: 7665 7273 696f 6e3e 0d0a 2020 2020 2020  version>..      \n-00002480: 2020 2020 2020 2020 2020 3c63 6f6e 6669            <confi\n-00002490: 6775 7261 7469 6f6e 3e0d 0a20 2020 2020  guration>..     \n-000024a0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-000024b0: 7265 6469 7265 6374 5465 7374 4f75 7470  redirectTestOutp\n-000024c0: 7574 546f 4669 6c65 3e74 7275 653c 2f72  utToFile>true</r\n-000024d0: 6564 6972 6563 7454 6573 744f 7574 7075  edirectTestOutpu\n-000024e0: 7454 6f46 696c 653e 0d0a 2020 2020 2020  tToFile>..      \n-000024f0: 2020 2020 2020 2020 2020 2020 2020 3c66                <f\n-00002500: 6f72 6b43 6f75 6e74 3e31 3c2f 666f 726b  orkCount>1</fork\n-00002510: 436f 756e 743e 0d0a 2020 2020 2020 2020  Count>..        \n-00002520: 2020 2020 2020 2020 2020 2020 3c72 6575              <reu\n-00002530: 7365 466f 726b 733e 7472 7565 3c2f 7265  seForks>true</re\n-00002540: 7573 6546 6f72 6b73 3e0d 0a20 2020 2020  useForks>..     \n-00002550: 2020 2020 2020 2020 2020 203c 2f63 6f6e             </con\n-00002560: 6669 6775 7261 7469 6f6e 3e0d 0a20 2020  figuration>..   \n-00002570: 2020 2020 2020 2020 203c 2f70 6c75 6769           </plugi\n-00002580: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00002590: 3c70 6c75 6769 6e3e 0d0a 2020 2020 2020  <plugin>..      \n-000025a0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-000025b0: 4964 3e6f 7267 2e61 7061 6368 652e 6d61  Id>org.apache.ma\n-000025c0: 7665 6e2e 706c 7567 696e 733c 2f67 726f  ven.plugins</gro\n-000025d0: 7570 4964 3e0d 0a20 2020 2020 2020 2020  upId>..         \n-000025e0: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-000025f0: 4964 3e6d 6176 656e 2d6a 6172 2d70 6c75  Id>maven-jar-plu\n-00002600: 6769 6e3c 2f61 7274 6966 6163 7449 643e  gin</artifactId>\n-00002610: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00002620: 2020 3c76 6572 7369 6f6e 3e33 2e32 2e30    <version>3.2.0\n-00002630: 3c2f 7665 7273 696f 6e3e 0d0a 2020 2020  </version>..    \n-00002640: 2020 2020 2020 2020 2020 2020 3c63 6f6e              <con\n-00002650: 6669 6775 7261 7469 6f6e 3e0d 0a20 2020  figuration>..   \n-00002660: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002670: 203c 6172 6368 6976 653e 0d0a 2020 2020   <archive>..    \n-00002680: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002690: 2020 2020 3c6d 616e 6966 6573 7445 6e74      <manifestEnt\n-000026a0: 7269 6573 3e0d 0a20 2020 2020 2020 2020  ries>..         \n-000026b0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000026c0: 2020 203c 4175 746f 6d61 7469 632d 4d6f     <Automatic-Mo\n-000026d0: 6475 6c65 2d4e 616d 653e 6f72 672e 6675  dule-Name>org.fu\n-000026e0: 7365 736f 7572 6365 2e6a 616e 7369 3c2f  sesource.jansi</\n-000026f0: 4175 746f 6d61 7469 632d 4d6f 6475 6c65  Automatic-Module\n-00002700: 2d4e 616d 653e 0d0a 2020 2020 2020 2020  -Name>..        \n-00002710: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002720: 3c2f 6d61 6e69 6665 7374 456e 7472 6965  </manifestEntrie\n-00002730: 733e 0d0a 2020 2020 2020 2020 2020 2020  s>..            \n-00002740: 2020 2020 2020 2020 2020 2020 3c6d 616e              <man\n-00002750: 6966 6573 7446 696c 653e 247b 7072 6f6a  ifestFile>${proj\n-00002760: 6563 742e 6275 696c 642e 6f75 7470 7574  ect.build.output\n-00002770: 4469 7265 6374 6f72 797d 2f4d 4554 412d  Directory}/META-\n-00002780: 494e 462f 4d41 4e49 4645 5354 2e4d 463c  INF/MANIFEST.MF<\n-00002790: 2f6d 616e 6966 6573 7446 696c 653e 0d0a  /manifestFile>..\n-000027a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000027b0: 2020 2020 3c2f 6172 6368 6976 653e 0d0a      </archive>..\n-000027c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000027d0: 3c2f 636f 6e66 6967 7572 6174 696f 6e3e  </configuration>\n-000027e0: 0d0a 2020 2020 2020 2020 2020 2020 3c2f  ..            </\n-000027f0: 706c 7567 696e 3e0d 0a20 2020 2020 2020  plugin>..       \n-00002800: 2020 2020 203c 706c 7567 696e 3e0d 0a20       <plugin>.. \n-00002810: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00002820: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n-00002830: 6865 2e6d 6176 656e 2e70 6c75 6769 6e73  he.maven.plugins\n-00002840: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-00002850: 2020 2020 2020 2020 2020 2020 3c61 7274              <art\n-00002860: 6966 6163 7449 643e 6d61 7665 6e2d 6a61  ifactId>maven-ja\n-00002870: 7661 646f 632d 706c 7567 696e 3c2f 6172  vadoc-plugin</ar\n-00002880: 7469 6661 6374 4964 3e0d 0a20 2020 2020  tifactId>..     \n-00002890: 2020 2020 2020 2020 2020 203c 7665 7273             <vers\n-000028a0: 696f 6e3e 332e 322e 303c 2f76 6572 7369  ion>3.2.0</versi\n-000028b0: 6f6e 3e0d 0a20 2020 2020 2020 2020 2020  on>..           \n-000028c0: 2020 2020 203c 636f 6e66 6967 7572 6174       <configurat\n-000028d0: 696f 6e3e 0d0a 2020 2020 2020 2020 2020  ion>..          \n-000028e0: 2020 2020 2020 2020 2020 3c64 6f63 7469            <docti\n-000028f0: 746c 653e 247b 7072 6f6a 6563 742e 6e61  tle>${project.na\n-00002900: 6d65 7d20 4150 4920 5265 6665 7265 6e63  me} API Referenc\n-00002910: 6520 2824 7b70 726f 6a65 6374 2e76 6572  e (${project.ver\n-00002920: 7369 6f6e 7d29 3c2f 646f 6374 6974 6c65  sion})</doctitle\n-00002930: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00002940: 2020 2020 2020 203c 7769 6e64 6f77 7469         <windowti\n-00002950: 746c 653e 247b 7072 6f6a 6563 742e 6e61  tle>${project.na\n-00002960: 6d65 7d20 4150 4920 5265 6665 7265 6e63  me} API Referenc\n-00002970: 6520 2824 7b70 726f 6a65 6374 2e76 6572  e (${project.ver\n-00002980: 7369 6f6e 7d29 3c2f 7769 6e64 6f77 7469  sion})</windowti\n-00002990: 746c 653e 0d0a 2020 2020 2020 2020 2020  tle>..          \n-000029a0: 2020 2020 2020 2020 2020 3c6c 6f63 616c            <local\n-000029b0: 653e 656e 5f55 533c 2f6c 6f63 616c 653e  e>en_US</locale>\n-000029c0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-000029d0: 2020 2020 2020 3c6c 696e 6b73 6f75 7263        <linksourc\n-000029e0: 653e 7472 7565 3c2f 6c69 6e6b 736f 7572  e>true</linksour\n-000029f0: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00002a00: 2020 2020 2020 2020 203c 6e6f 7469 6d65           <notime\n-00002a10: 7374 616d 703e 7472 7565 3c2f 6e6f 7469  stamp>true</noti\n-00002a20: 6d65 7374 616d 703e 0d0a 2020 2020 2020  mestamp>..      \n-00002a30: 2020 2020 2020 2020 2020 2020 2020 3c71                <q\n-00002a40: 7569 6574 3e74 7275 653c 2f71 7569 6574  uiet>true</quiet\n-00002a50: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00002a60: 2020 2020 2020 203c 646f 6365 6e63 6f64         <docencod\n-00002a70: 696e 673e 5554 462d 383c 2f64 6f63 656e  ing>UTF-8</docen\n-00002a80: 636f 6469 6e67 3e0d 0a20 2020 2020 2020  coding>..       \n-00002a90: 2020 2020 2020 2020 2020 2020 203c 7665               <ve\n-00002aa0: 7273 696f 6e3e 6661 6c73 653c 2f76 6572  rsion>false</ver\n-00002ab0: 7369 6f6e 3e0d 0a20 2020 2020 2020 2020  sion>..         \n-00002ac0: 2020 2020 2020 2020 2020 203c 6175 7468             <auth\n-00002ad0: 6f72 3e74 7275 653c 2f61 7574 686f 723e  or>true</author>\n-00002ae0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00002af0: 2020 2020 2020 3c6b 6579 776f 7264 733e        <keywords>\n-00002b00: 7472 7565 3c2f 6b65 7977 6f72 6473 3e0d  true</keywords>.\n-00002b10: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002b20: 2020 2020 203c 736f 7572 6365 3e24 7b6a       <source>${j\n-00002b30: 6176 6164 6f63 536f 7572 6365 7d3c 2f73  avadocSource}</s\n-00002b40: 6f75 7263 653e 0d0a 2020 2020 2020 2020  ource>..        \n-00002b50: 2020 2020 2020 2020 3c2f 636f 6e66 6967          </config\n-00002b60: 7572 6174 696f 6e3e 0d0a 2020 2020 2020  uration>..      \n-00002b70: 2020 2020 2020 2020 2020 3c65 7865 6375            <execu\n-00002b80: 7469 6f6e 733e 0d0a 2020 2020 2020 2020  tions>..        \n-00002b90: 2020 2020 2020 2020 2020 2020 3c65 7865              <exe\n-00002ba0: 6375 7469 6f6e 3e0d 0a20 2020 2020 2020  cution>..       \n-00002bb0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002bc0: 203c 6964 3e61 7474 6163 682d 6a61 7661   <id>attach-java\n-00002bd0: 646f 6373 3c2f 6964 3e0d 0a20 2020 2020  docs</id>..     \n-00002be0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002bf0: 2020 203c 676f 616c 733e 0d0a 2020 2020     <goals>..    \n-00002c00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002c10: 2020 2020 2020 2020 3c67 6f61 6c3e 6a61          <goal>ja\n-00002c20: 723c 2f67 6f61 6c3e 0d0a 2020 2020 2020  r</goal>..      \n-00002c30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002c40: 2020 3c2f 676f 616c 733e 0d0a 2020 2020    </goals>..    \n-00002c50: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002c60: 3c2f 6578 6563 7574 696f 6e3e 0d0a 2020  </execution>..  \n-00002c70: 2020 2020 2020 2020 2020 2020 2020 3c2f                </\n-00002c80: 6578 6563 7574 696f 6e73 3e0d 0a20 2020  executions>..   \n-00002c90: 2020 2020 2020 2020 203c 2f70 6c75 6769           </plugi\n-00002ca0: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00002cb0: 3c70 6c75 6769 6e3e 0d0a 2020 2020 2020  <plugin>..      \n-00002cc0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-00002cd0: 4964 3e6f 7267 2e61 7061 6368 652e 6d61  Id>org.apache.ma\n-00002ce0: 7665 6e2e 706c 7567 696e 733c 2f67 726f  ven.plugins</gro\n-00002cf0: 7570 4964 3e0d 0a20 2020 2020 2020 2020  upId>..         \n-00002d00: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-00002d10: 4964 3e6d 6176 656e 2d73 6f75 7263 652d  Id>maven-source-\n-00002d20: 706c 7567 696e 3c2f 6172 7469 6661 6374  plugin</artifact\n-00002d30: 4964 3e0d 0a20 2020 2020 2020 2020 2020  Id>..           \n-00002d40: 2020 2020 203c 7665 7273 696f 6e3e 332e       <version>3.\n-00002d50: 322e 313c 2f76 6572 7369 6f6e 3e0d 0a20  2.1</version>.. \n-00002d60: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00002d70: 6578 6563 7574 696f 6e73 3e0d 0a20 2020  executions>..   \n-00002d80: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002d90: 203c 6578 6563 7574 696f 6e3e 0d0a 2020   <execution>..  \n-00002da0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002db0: 2020 2020 2020 3c69 643e 6174 7461 6368        <id>attach\n-00002dc0: 2d73 6f75 7263 6573 3c2f 6964 3e0d 0a20  -sources</id>.. \n-00002dd0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002de0: 2020 2020 2020 203c 676f 616c 733e 0d0a         <goals>..\n-00002df0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002e00: 2020 2020 2020 2020 2020 2020 3c67 6f61              <goa\n-00002e10: 6c3e 6a61 722d 6e6f 2d66 6f72 6b3c 2f67  l>jar-no-fork</g\n-00002e20: 6f61 6c3e 0d0a 2020 2020 2020 2020 2020  oal>..          \n-00002e30: 2020 2020 2020 2020 2020 2020 2020 3c2f                </\n-00002e40: 676f 616c 733e 0d0a 2020 2020 2020 2020  goals>..        \n-00002e50: 2020 2020 2020 2020 2020 2020 3c2f 6578              </ex\n-00002e60: 6563 7574 696f 6e3e 0d0a 2020 2020 2020  ecution>..      \n-00002e70: 2020 2020 2020 2020 2020 3c2f 6578 6563            </exec\n-00002e80: 7574 696f 6e73 3e0d 0a20 2020 2020 2020  utions>..       \n-00002e90: 2020 2020 203c 2f70 6c75 6769 6e3e 0d0a       </plugin>..\n-00002ea0: 2020 2020 2020 2020 2020 2020 3c70 6c75              <plu\n-00002eb0: 6769 6e3e 0d0a 2020 2020 2020 2020 2020  gin>..          \n-00002ec0: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n-00002ed0: 7267 2e61 7061 6368 652e 6d61 7665 6e2e  rg.apache.maven.\n-00002ee0: 706c 7567 696e 733c 2f67 726f 7570 4964  plugins</groupId\n-00002ef0: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00002f00: 2020 203c 6172 7469 6661 6374 4964 3e6d     <artifactId>m\n-00002f10: 6176 656e 2d64 6570 6c6f 792d 706c 7567  aven-deploy-plug\n-00002f20: 696e 3c2f 6172 7469 6661 6374 4964 3e0d  in</artifactId>.\n-00002f30: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002f40: 203c 7665 7273 696f 6e3e 332e 302e 302d   <version>3.0.0-\n-00002f50: 4d31 3c2f 7665 7273 696f 6e3e 0d0a 2020  M1</version>..  \n-00002f60: 2020 2020 2020 2020 2020 3c2f 706c 7567            </plug\n-00002f70: 696e 3e0d 0a20 2020 2020 2020 2020 2020  in>..           \n-00002f80: 203c 706c 7567 696e 3e0d 0a20 2020 2020   <plugin>..     \n-00002f90: 2020 2020 2020 2020 2020 203c 6772 6f75             <grou\n-00002fa0: 7049 643e 6f72 672e 6170 6163 6865 2e6d  pId>org.apache.m\n-00002fb0: 6176 656e 2e70 6c75 6769 6e73 3c2f 6772  aven.plugins</gr\n-00002fc0: 6f75 7049 643e 0d0a 2020 2020 2020 2020  oupId>..        \n-00002fd0: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n-00002fe0: 7449 643e 6d61 7665 6e2d 7265 6c65 6173  tId>maven-releas\n-00002ff0: 652d 706c 7567 696e 3c2f 6172 7469 6661  e-plugin</artifa\n-00003000: 6374 4964 3e0d 0a20 2020 2020 2020 2020  ctId>..         \n-00003010: 2020 2020 2020 203c 7665 7273 696f 6e3e         <version>\n-00003020: 332e 302e 302d 4d31 3c2f 7665 7273 696f  3.0.0-M1</versio\n-00003030: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00003040: 3c2f 706c 7567 696e 3e0d 0a20 2020 2020  </plugin>..     \n-00003050: 2020 2020 2020 203c 706c 7567 696e 3e0d         <plugin>.\n-00003060: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00003070: 203c 6772 6f75 7049 643e 6f72 672e 6170   <groupId>org.ap\n-00003080: 6163 6865 2e6d 6176 656e 2e70 6c75 6769  ache.maven.plugi\n-00003090: 6e73 3c2f 6772 6f75 7049 643e 0d0a 2020  ns</groupId>..  \n-000030a0: 2020 2020 2020 2020 2020 2020 2020 3c61                <a\n-000030b0: 7274 6966 6163 7449 643e 6d61 7665 6e2d  rtifactId>maven-\n-000030c0: 6770 672d 706c 7567 696e 3c2f 6172 7469  gpg-plugin</arti\n-000030d0: 6661 6374 4964 3e0d 0a20 2020 2020 2020  factId>..       \n-000030e0: 2020 2020 2020 2020 203c 7665 7273 696f           <versio\n-000030f0: 6e3e 312e 363c 2f76 6572 7369 6f6e 3e0d  n>1.6</version>.\n-00003100: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00003110: 203c 6578 6563 7574 696f 6e73 3e0d 0a20   <executions>.. \n-00003120: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003130: 2020 203c 6578 6563 7574 696f 6e3e 0d0a     <execution>..\n-00003140: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003150: 2020 2020 2020 2020 3c69 643e 7369 676e          <id>sign\n-00003160: 2d61 7274 6966 6163 7473 3c2f 6964 3e0d  -artifacts</id>.\n-00003170: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00003180: 2020 2020 2020 2020 203c 7068 6173 653e           <phase>\n-00003190: 7665 7269 6679 3c2f 7068 6173 653e 0d0a  verify</phase>..\n-000031a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000031b0: 2020 2020 2020 2020 3c67 6f61 6c73 3e0d          <goals>.\n-000031c0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-000031d0: 2020 2020 2020 2020 2020 2020 203c 676f               <go\n-000031e0: 616c 3e73 6967 6e3c 2f67 6f61 6c3e 0d0a  al>sign</goal>..\n-000031f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003200: 2020 2020 2020 2020 3c2f 676f 616c 733e          </goals>\n-00003210: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00003220: 2020 2020 2020 3c2f 6578 6563 7574 696f        </executio\n-00003230: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00003240: 2020 2020 3c2f 6578 6563 7574 696f 6e73      </executions\n-00003250: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00003260: 2f70 6c75 6769 6e3e 0d0a 2020 2020 2020  /plugin>..      \n-00003270: 2020 2020 2020 3c70 6c75 6769 6e3e 0d0a        <plugin>..\n-00003280: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003290: 3c67 726f 7570 4964 3e6f 7267 2e73 6f6e  <groupId>org.son\n-000032a0: 6174 7970 652e 706c 7567 696e 733c 2f67  atype.plugins</g\n-000032b0: 726f 7570 4964 3e0d 0a20 2020 2020 2020  roupId>..       \n-000032c0: 2020 2020 2020 2020 203c 6172 7469 6661           <artifa\n-000032d0: 6374 4964 3e6e 6578 7573 2d73 7461 6769  ctId>nexus-stagi\n-000032e0: 6e67 2d6d 6176 656e 2d70 6c75 6769 6e3c  ng-maven-plugin<\n-000032f0: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00003300: 2020 2020 2020 2020 2020 2020 2020 3c76                <v\n-00003310: 6572 7369 6f6e 3e31 2e36 2e38 3c2f 7665  ersion>1.6.8</ve\n-00003320: 7273 696f 6e3e 0d0a 2020 2020 2020 2020  rsion>..        \n-00003330: 2020 2020 2020 2020 3c65 7874 656e 7369          <extensi\n-00003340: 6f6e 733e 7472 7565 3c2f 6578 7465 6e73  ons>true</extens\n-00003350: 696f 6e73 3e0d 0a20 2020 2020 2020 2020  ions>..         \n-00003360: 2020 2020 2020 203c 636f 6e66 6967 7572         <configur\n-00003370: 6174 696f 6e3e 0d0a 2020 2020 2020 2020  ation>..        \n-00003380: 2020 2020 2020 2020 2020 2020 3c73 6572              <ser\n-00003390: 7665 7249 643e 6f73 7372 683c 2f73 6572  verId>ossrh</ser\n-000033a0: 7665 7249 643e 0d0a 2020 2020 2020 2020  verId>..        \n-000033b0: 2020 2020 2020 2020 2020 2020 3c6e 6578              <nex\n-000033c0: 7573 5572 6c3e 6874 7470 733a 2f2f 6f73  usUrl>https://os\n-000033d0: 732e 736f 6e61 7479 7065 2e6f 7267 2f3c  s.sonatype.org/<\n-000033e0: 2f6e 6578 7573 5572 6c3e 0d0a 2020 2020  /nexusUrl>..    \n-000033f0: 2020 2020 2020 2020 2020 2020 3c2f 636f              </co\n-00003400: 6e66 6967 7572 6174 696f 6e3e 0d0a 2020  nfiguration>..  \n-00003410: 2020 2020 2020 2020 2020 3c2f 706c 7567            </plug\n-00003420: 696e 3e0d 0a20 2020 2020 2020 203c 2f70  in>..        </p\n-00003430: 6c75 6769 6e73 3e0d 0a20 2020 203c 2f62  lugins>..    </b\n-00003440: 7569 6c64 3e0d 0a0d 0a20 2020 203c 6465  uild>....    <de\n-00003450: 7065 6e64 656e 6369 6573 3e0d 0a20 2020  pendencies>..   \n-00003460: 2020 2020 203c 6465 7065 6e64 656e 6379       <dependency\n-00003470: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00003480: 6772 6f75 7049 643e 6f72 672e 6a75 6e69  groupId>org.juni\n-00003490: 742e 6a75 7069 7465 723c 2f67 726f 7570  t.jupiter</group\n-000034a0: 4964 3e0d 0a20 2020 2020 2020 2020 2020  Id>..           \n-000034b0: 203c 6172 7469 6661 6374 4964 3e6a 756e   <artifactId>jun\n-000034c0: 6974 2d6a 7570 6974 6572 3c2f 6172 7469  it-jupiter</arti\n-000034d0: 6661 6374 4964 3e0d 0a20 2020 2020 2020  factId>..       \n-000034e0: 2020 2020 203c 7665 7273 696f 6e3e 352e       <version>5.\n-000034f0: 372e 303c 2f76 6572 7369 6f6e 3e0d 0a20  7.0</version>.. \n-00003500: 2020 2020 2020 2020 2020 203c 7363 6f70             <scop\n-00003510: 653e 7465 7374 3c2f 7363 6f70 653e 0d0a  e>test</scope>..\n-00003520: 2020 2020 2020 2020 3c2f 6465 7065 6e64          </depend\n-00003530: 656e 6379 3e0d 0a20 2020 2020 2020 203c  ency>..        <\n-00003540: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00003550: 2020 2020 2020 2020 203c 6772 6f75 7049           <groupI\n-00003560: 643e 6f72 672e 6a75 6e69 742e 6a75 7069  d>org.junit.jupi\n-00003570: 7465 723c 2f67 726f 7570 4964 3e0d 0a20  ter</groupId>.. \n-00003580: 2020 2020 2020 2020 2020 203c 6172 7469             <arti\n-00003590: 6661 6374 4964 3e6a 756e 6974 2d6a 7570  factId>junit-jup\n-000035a0: 6974 6572 2d70 6172 616d 733c 2f61 7274  iter-params</art\n-000035b0: 6966 6163 7449 643e 0d0a 2020 2020 2020  ifactId>..      \n-000035c0: 2020 2020 2020 3c76 6572 7369 6f6e 3e35        <version>5\n-000035d0: 2e37 2e30 3c2f 7665 7273 696f 6e3e 0d0a  .7.0</version>..\n-000035e0: 2020 2020 2020 2020 2020 2020 3c73 636f              <sco\n-000035f0: 7065 3e74 6573 743c 2f73 636f 7065 3e0d  pe>test</scope>.\n-00003600: 0a20 2020 2020 2020 203c 2f64 6570 656e  .        </depen\n-00003610: 6465 6e63 793e 0d0a 2020 2020 2020 2020  dency>..        \n-00003620: 3c64 6570 656e 6465 6e63 793e 0d0a 2020  <dependency>..  \n-00003630: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-00003640: 4964 3e69 6e66 6f2e 7069 636f 636c 693c  Id>info.picocli<\n-00003650: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-00003660: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-00003670: 4964 3e70 6963 6f63 6c69 2d63 6f64 6567  Id>picocli-codeg\n-00003680: 656e 3c2f 6172 7469 6661 6374 4964 3e0d  en</artifactId>.\n-00003690: 0a20 2020 2020 2020 2020 2020 203c 7665  .            <ve\n-000036a0: 7273 696f 6e3e 342e 352e 323c 2f76 6572  rsion>4.5.2</ver\n-000036b0: 7369 6f6e 3e0d 0a20 2020 2020 2020 2020  sion>..         \n-000036c0: 2020 203c 7363 6f70 653e 7465 7374 3c2f     <scope>test</\n-000036d0: 7363 6f70 653e 0d0a 2020 2020 2020 2020  scope>..        \n-000036e0: 3c2f 6465 7065 6e64 656e 6379 3e0d 0a20  </dependency>.. \n-000036f0: 2020 203c 2f64 6570 656e 6465 6e63 6965     </dependencie\n-00003700: 733e 0d0a 0d0a 2020 2020 3c70 726f 6669  s>....    <profi\n-00003710: 6c65 733e 0d0a 2020 2020 2020 2020 3c70  les>..        <p\n-00003720: 726f 6669 6c65 3e0d 0a20 2020 2020 2020  rofile>..       \n-00003730: 2020 2020 203c 6964 3e6a 646b 3135 2b3c       <id>jdk15+<\n-00003740: 2f69 643e 0d0a 2020 2020 2020 2020 2020  /id>..          \n-00003750: 2020 3c61 6374 6976 6174 696f 6e3e 0d0a    <activation>..\n-00003760: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003770: 3c6a 646b 3e5b 3135 2c29 3c2f 6a64 6b3e  <jdk>[15,)</jdk>\n-00003780: 0d0a 2020 2020 2020 2020 2020 2020 3c2f  ..            </\n-00003790: 6163 7469 7661 7469 6f6e 3e0d 0a20 2020  activation>..   \n-000037a0: 2020 2020 2020 2020 203c 7072 6f70 6572           <proper\n-000037b0: 7469 6573 3e0d 0a20 2020 2020 2020 2020  ties>..         \n-000037c0: 2020 2020 2020 203c 6a64 6b54 6172 6765         <jdkTarge\n-000037d0: 743e 312e 373c 2f6a 646b 5461 7267 6574  t>1.7</jdkTarget\n-000037e0: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-000037f0: 2020 203c 6a61 7661 646f 6353 6f75 7263     <javadocSourc\n-00003800: 653e 373c 2f6a 6176 6164 6f63 536f 7572  e>7</javadocSour\n-00003810: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00003820: 203c 2f70 726f 7065 7274 6965 733e 0d0a   </properties>..\n-00003830: 2020 2020 2020 2020 3c2f 7072 6f66 696c          </profil\n-00003840: 653e 0d0a 2020 2020 3c2f 7072 6f66 696c  e>..    </profil\n-00003850: 6573 3e0d 0a0d 0a3c 2f70 726f 6a65 6374  es>....</project\n-00003860: 3e0d 0a                                  >..\n+00002340: 3c61 7274 6966 6163 7449 643e 6d61 7665  <artifactId>mave\n+00002350: 6e2d 7375 7265 6669 7265 2d70 6c75 6769  n-surefire-plugi\n+00002360: 6e3c 2f61 7274 6966 6163 7449 643e 0a20  n</artifactId>. \n+00002370: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002380: 7665 7273 696f 6e3e 332e 302e 302d 4d35  version>3.0.0-M5\n+00002390: 3c2f 7665 7273 696f 6e3e 0a20 2020 2020  </version>.     \n+000023a0: 2020 2020 2020 2020 2020 203c 636f 6e66             <conf\n+000023b0: 6967 7572 6174 696f 6e3e 0a20 2020 2020  iguration>.     \n+000023c0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+000023d0: 7265 6469 7265 6374 5465 7374 4f75 7470  redirectTestOutp\n+000023e0: 7574 546f 4669 6c65 3e74 7275 653c 2f72  utToFile>true</r\n+000023f0: 6564 6972 6563 7454 6573 744f 7574 7075  edirectTestOutpu\n+00002400: 7454 6f46 696c 653e 0a20 2020 2020 2020  tToFile>.       \n+00002410: 2020 2020 2020 2020 2020 2020 203c 666f               <fo\n+00002420: 726b 436f 756e 743e 313c 2f66 6f72 6b43  rkCount>1</forkC\n+00002430: 6f75 6e74 3e0a 2020 2020 2020 2020 2020  ount>.          \n+00002440: 2020 2020 2020 2020 2020 3c72 6575 7365            <reuse\n+00002450: 466f 726b 733e 7472 7565 3c2f 7265 7573  Forks>true</reus\n+00002460: 6546 6f72 6b73 3e0a 2020 2020 2020 2020  eForks>.        \n+00002470: 2020 2020 2020 2020 3c2f 636f 6e66 6967          </config\n+00002480: 7572 6174 696f 6e3e 0a20 2020 2020 2020  uration>.       \n+00002490: 2020 2020 203c 2f70 6c75 6769 6e3e 0a20       </plugin>. \n+000024a0: 2020 2020 2020 2020 2020 203c 706c 7567             <plug\n+000024b0: 696e 3e0a 2020 2020 2020 2020 2020 2020  in>.            \n+000024c0: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+000024d0: 2e61 7061 6368 652e 6d61 7665 6e2e 706c  .apache.maven.pl\n+000024e0: 7567 696e 733c 2f67 726f 7570 4964 3e0a  ugins</groupId>.\n+000024f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002500: 3c61 7274 6966 6163 7449 643e 6d61 7665  <artifactId>mave\n+00002510: 6e2d 6a61 722d 706c 7567 696e 3c2f 6172  n-jar-plugin</ar\n+00002520: 7469 6661 6374 4964 3e0a 2020 2020 2020  tifactId>.      \n+00002530: 2020 2020 2020 2020 2020 3c76 6572 7369            <versi\n+00002540: 6f6e 3e33 2e32 2e30 3c2f 7665 7273 696f  on>3.2.0</versio\n+00002550: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00002560: 2020 203c 636f 6e66 6967 7572 6174 696f     <configuratio\n+00002570: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00002580: 2020 2020 2020 203c 6172 6368 6976 653e         <archive>\n+00002590: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+000025a0: 2020 2020 2020 2020 203c 6d61 6e69 6665           <manife\n+000025b0: 7374 456e 7472 6965 733e 0a20 2020 2020  stEntries>.     \n+000025c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000025d0: 2020 2020 2020 203c 4175 746f 6d61 7469         <Automati\n+000025e0: 632d 4d6f 6475 6c65 2d4e 616d 653e 6f72  c-Module-Name>or\n+000025f0: 672e 6675 7365 736f 7572 6365 2e6a 616e  g.fusesource.jan\n+00002600: 7369 3c2f 4175 746f 6d61 7469 632d 4d6f  si</Automatic-Mo\n+00002610: 6475 6c65 2d4e 616d 653e 0a20 2020 2020  dule-Name>.     \n+00002620: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002630: 2020 203c 2f6d 616e 6966 6573 7445 6e74     </manifestEnt\n+00002640: 7269 6573 3e0a 2020 2020 2020 2020 2020  ries>.          \n+00002650: 2020 2020 2020 2020 2020 2020 2020 3c6d                <m\n+00002660: 616e 6966 6573 7446 696c 653e 247b 7072  anifestFile>${pr\n+00002670: 6f6a 6563 742e 6275 696c 642e 6f75 7470  oject.build.outp\n+00002680: 7574 4469 7265 6374 6f72 797d 2f4d 4554  utDirectory}/MET\n+00002690: 412d 494e 462f 4d41 4e49 4645 5354 2e4d  A-INF/MANIFEST.M\n+000026a0: 463c 2f6d 616e 6966 6573 7446 696c 653e  F</manifestFile>\n+000026b0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+000026c0: 2020 2020 203c 2f61 7263 6869 7665 3e0a       </archive>.\n+000026d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000026e0: 3c2f 636f 6e66 6967 7572 6174 696f 6e3e  </configuration>\n+000026f0: 0a20 2020 2020 2020 2020 2020 203c 2f70  .            </p\n+00002700: 6c75 6769 6e3e 0a20 2020 2020 2020 2020  lugin>.         \n+00002710: 2020 203c 706c 7567 696e 3e0a 2020 2020     <plugin>.    \n+00002720: 2020 2020 2020 2020 2020 2020 3c67 726f              <gro\n+00002730: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n+00002740: 6d61 7665 6e2e 706c 7567 696e 733c 2f67  maven.plugins</g\n+00002750: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00002760: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00002770: 7449 643e 6d61 7665 6e2d 6a61 7661 646f  tId>maven-javado\n+00002780: 632d 706c 7567 696e 3c2f 6172 7469 6661  c-plugin</artifa\n+00002790: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+000027a0: 2020 2020 2020 3c76 6572 7369 6f6e 3e33        <version>3\n+000027b0: 2e32 2e30 3c2f 7665 7273 696f 6e3e 0a20  .2.0</version>. \n+000027c0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+000027d0: 636f 6e66 6967 7572 6174 696f 6e3e 0a20  configuration>. \n+000027e0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000027f0: 2020 203c 646f 6374 6974 6c65 3e24 7b70     <doctitle>${p\n+00002800: 726f 6a65 6374 2e6e 616d 657d 2041 5049  roject.name} API\n+00002810: 2052 6566 6572 656e 6365 2028 247b 7072   Reference (${pr\n+00002820: 6f6a 6563 742e 7665 7273 696f 6e7d 293c  oject.version})<\n+00002830: 2f64 6f63 7469 746c 653e 0a20 2020 2020  /doctitle>.     \n+00002840: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002850: 7769 6e64 6f77 7469 746c 653e 247b 7072  windowtitle>${pr\n+00002860: 6f6a 6563 742e 6e61 6d65 7d20 4150 4920  oject.name} API \n+00002870: 5265 6665 7265 6e63 6520 2824 7b70 726f  Reference (${pro\n+00002880: 6a65 6374 2e76 6572 7369 6f6e 7d29 3c2f  ject.version})</\n+00002890: 7769 6e64 6f77 7469 746c 653e 0a20 2020  windowtitle>.   \n+000028a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000028b0: 203c 6c6f 6361 6c65 3e65 6e5f 5553 3c2f   <locale>en_US</\n+000028c0: 6c6f 6361 6c65 3e0a 2020 2020 2020 2020  locale>.        \n+000028d0: 2020 2020 2020 2020 2020 2020 3c6c 696e              <lin\n+000028e0: 6b73 6f75 7263 653e 7472 7565 3c2f 6c69  ksource>true</li\n+000028f0: 6e6b 736f 7572 6365 3e0a 2020 2020 2020  nksource>.      \n+00002900: 2020 2020 2020 2020 2020 2020 2020 3c6e                <n\n+00002910: 6f74 696d 6573 7461 6d70 3e74 7275 653c  otimestamp>true<\n+00002920: 2f6e 6f74 696d 6573 7461 6d70 3e0a 2020  /notimestamp>.  \n+00002930: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002940: 2020 3c71 7569 6574 3e74 7275 653c 2f71    <quiet>true</q\n+00002950: 7569 6574 3e0a 2020 2020 2020 2020 2020  uiet>.          \n+00002960: 2020 2020 2020 2020 2020 3c64 6f63 656e            <docen\n+00002970: 636f 6469 6e67 3e55 5446 2d38 3c2f 646f  coding>UTF-8</do\n+00002980: 6365 6e63 6f64 696e 673e 0a20 2020 2020  cencoding>.     \n+00002990: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+000029a0: 7665 7273 696f 6e3e 6661 6c73 653c 2f76  version>false</v\n+000029b0: 6572 7369 6f6e 3e0a 2020 2020 2020 2020  ersion>.        \n+000029c0: 2020 2020 2020 2020 2020 2020 3c61 7574              <aut\n+000029d0: 686f 723e 7472 7565 3c2f 6175 7468 6f72  hor>true</author\n+000029e0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000029f0: 2020 2020 2020 3c6b 6579 776f 7264 733e        <keywords>\n+00002a00: 7472 7565 3c2f 6b65 7977 6f72 6473 3e0a  true</keywords>.\n+00002a10: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002a20: 2020 2020 3c73 6f75 7263 653e 247b 6a61      <source>${ja\n+00002a30: 7661 646f 6353 6f75 7263 657d 3c2f 736f  vadocSource}</so\n+00002a40: 7572 6365 3e0a 2020 2020 2020 2020 2020  urce>.          \n+00002a50: 2020 2020 2020 3c2f 636f 6e66 6967 7572        </configur\n+00002a60: 6174 696f 6e3e 0a20 2020 2020 2020 2020  ation>.         \n+00002a70: 2020 2020 2020 203c 6578 6563 7574 696f         <executio\n+00002a80: 6e73 3e0a 2020 2020 2020 2020 2020 2020  ns>.            \n+00002a90: 2020 2020 2020 2020 3c65 7865 6375 7469          <executi\n+00002aa0: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+00002ab0: 2020 2020 2020 2020 2020 2020 3c69 643e              <id>\n+00002ac0: 6174 7461 6368 2d6a 6176 6164 6f63 733c  attach-javadocs<\n+00002ad0: 2f69 643e 0a20 2020 2020 2020 2020 2020  /id>.           \n+00002ae0: 2020 2020 2020 2020 2020 2020 203c 676f               <go\n+00002af0: 616c 733e 0a20 2020 2020 2020 2020 2020  als>.           \n+00002b00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002b10: 203c 676f 616c 3e6a 6172 3c2f 676f 616c   <goal>jar</goal\n+00002b20: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00002b30: 2020 2020 2020 2020 2020 3c2f 676f 616c            </goal\n+00002b40: 733e 0a20 2020 2020 2020 2020 2020 2020  s>.             \n+00002b50: 2020 2020 2020 203c 2f65 7865 6375 7469         </executi\n+00002b60: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+00002b70: 2020 2020 3c2f 6578 6563 7574 696f 6e73      </executions\n+00002b80: 3e0a 2020 2020 2020 2020 2020 2020 3c2f  >.            </\n+00002b90: 706c 7567 696e 3e0a 2020 2020 2020 2020  plugin>.        \n+00002ba0: 2020 2020 3c70 6c75 6769 6e3e 0a20 2020      <plugin>.   \n+00002bb0: 2020 2020 2020 2020 2020 2020 203c 6772               <gr\n+00002bc0: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+00002bd0: 2e6d 6176 656e 2e70 6c75 6769 6e73 3c2f  .maven.plugins</\n+00002be0: 6772 6f75 7049 643e 0a20 2020 2020 2020  groupId>.       \n+00002bf0: 2020 2020 2020 2020 203c 6172 7469 6661           <artifa\n+00002c00: 6374 4964 3e6d 6176 656e 2d73 6f75 7263  ctId>maven-sourc\n+00002c10: 652d 706c 7567 696e 3c2f 6172 7469 6661  e-plugin</artifa\n+00002c20: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+00002c30: 2020 2020 2020 3c76 6572 7369 6f6e 3e33        <version>3\n+00002c40: 2e32 2e31 3c2f 7665 7273 696f 6e3e 0a20  .2.1</version>. \n+00002c50: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002c60: 6578 6563 7574 696f 6e73 3e0a 2020 2020  executions>.    \n+00002c70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002c80: 3c65 7865 6375 7469 6f6e 3e0a 2020 2020  <execution>.    \n+00002c90: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002ca0: 2020 2020 3c69 643e 6174 7461 6368 2d73      <id>attach-s\n+00002cb0: 6f75 7263 6573 3c2f 6964 3e0a 2020 2020  ources</id>.    \n+00002cc0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002cd0: 2020 2020 3c67 6f61 6c73 3e0a 2020 2020      <goals>.    \n+00002ce0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002cf0: 2020 2020 2020 2020 3c67 6f61 6c3e 6a61          <goal>ja\n+00002d00: 722d 6e6f 2d66 6f72 6b3c 2f67 6f61 6c3e  r-no-fork</goal>\n+00002d10: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00002d20: 2020 2020 2020 2020 203c 2f67 6f61 6c73           </goals\n+00002d30: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00002d40: 2020 2020 2020 3c2f 6578 6563 7574 696f        </executio\n+00002d50: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00002d60: 2020 203c 2f65 7865 6375 7469 6f6e 733e     </executions>\n+00002d70: 0a20 2020 2020 2020 2020 2020 203c 2f70  .            </p\n+00002d80: 6c75 6769 6e3e 0a20 2020 2020 2020 2020  lugin>.         \n+00002d90: 2020 203c 706c 7567 696e 3e0a 2020 2020     <plugin>.    \n+00002da0: 2020 2020 2020 2020 2020 2020 3c67 726f              <gro\n+00002db0: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n+00002dc0: 6d61 7665 6e2e 706c 7567 696e 733c 2f67  maven.plugins</g\n+00002dd0: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00002de0: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00002df0: 7449 643e 6d61 7665 6e2d 6465 706c 6f79  tId>maven-deploy\n+00002e00: 2d70 6c75 6769 6e3c 2f61 7274 6966 6163  -plugin</artifac\n+00002e10: 7449 643e 0a20 2020 2020 2020 2020 2020  tId>.           \n+00002e20: 2020 2020 203c 7665 7273 696f 6e3e 332e       <version>3.\n+00002e30: 302e 302d 4d31 3c2f 7665 7273 696f 6e3e  0.0-M1</version>\n+00002e40: 0a20 2020 2020 2020 2020 2020 203c 2f70  .            </p\n+00002e50: 6c75 6769 6e3e 0a20 2020 2020 2020 2020  lugin>.         \n+00002e60: 2020 203c 706c 7567 696e 3e0a 2020 2020     <plugin>.    \n+00002e70: 2020 2020 2020 2020 2020 2020 3c67 726f              <gro\n+00002e80: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n+00002e90: 6d61 7665 6e2e 706c 7567 696e 733c 2f67  maven.plugins</g\n+00002ea0: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00002eb0: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00002ec0: 7449 643e 6d61 7665 6e2d 7265 6c65 6173  tId>maven-releas\n+00002ed0: 652d 706c 7567 696e 3c2f 6172 7469 6661  e-plugin</artifa\n+00002ee0: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+00002ef0: 2020 2020 2020 3c76 6572 7369 6f6e 3e33        <version>3\n+00002f00: 2e30 2e30 2d4d 313c 2f76 6572 7369 6f6e  .0.0-M1</version\n+00002f10: 3e0a 2020 2020 2020 2020 2020 2020 3c2f  >.            </\n+00002f20: 706c 7567 696e 3e0a 2020 2020 2020 2020  plugin>.        \n+00002f30: 2020 2020 3c70 6c75 6769 6e3e 0a20 2020      <plugin>.   \n+00002f40: 2020 2020 2020 2020 2020 2020 203c 6772               <gr\n+00002f50: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+00002f60: 2e6d 6176 656e 2e70 6c75 6769 6e73 3c2f  .maven.plugins</\n+00002f70: 6772 6f75 7049 643e 0a20 2020 2020 2020  groupId>.       \n+00002f80: 2020 2020 2020 2020 203c 6172 7469 6661           <artifa\n+00002f90: 6374 4964 3e6d 6176 656e 2d67 7067 2d70  ctId>maven-gpg-p\n+00002fa0: 6c75 6769 6e3c 2f61 7274 6966 6163 7449  lugin</artifactI\n+00002fb0: 643e 0a20 2020 2020 2020 2020 2020 2020  d>.             \n+00002fc0: 2020 203c 7665 7273 696f 6e3e 312e 363c     <version>1.6<\n+00002fd0: 2f76 6572 7369 6f6e 3e0a 2020 2020 2020  /version>.      \n+00002fe0: 2020 2020 2020 2020 2020 3c65 7865 6375            <execu\n+00002ff0: 7469 6f6e 733e 0a20 2020 2020 2020 2020  tions>.         \n+00003000: 2020 2020 2020 2020 2020 203c 6578 6563             <exec\n+00003010: 7574 696f 6e3e 0a20 2020 2020 2020 2020  ution>.         \n+00003020: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00003030: 6964 3e73 6967 6e2d 6172 7469 6661 6374  id>sign-artifact\n+00003040: 733c 2f69 643e 0a20 2020 2020 2020 2020  s</id>.         \n+00003050: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00003060: 7068 6173 653e 7665 7269 6679 3c2f 7068  phase>verify</ph\n+00003070: 6173 653e 0a20 2020 2020 2020 2020 2020  ase>.           \n+00003080: 2020 2020 2020 2020 2020 2020 203c 676f               <go\n+00003090: 616c 733e 0a20 2020 2020 2020 2020 2020  als>.           \n+000030a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000030b0: 203c 676f 616c 3e73 6967 6e3c 2f67 6f61   <goal>sign</goa\n+000030c0: 6c3e 0a20 2020 2020 2020 2020 2020 2020  l>.             \n+000030d0: 2020 2020 2020 2020 2020 203c 2f67 6f61             </goa\n+000030e0: 6c73 3e0a 2020 2020 2020 2020 2020 2020  ls>.            \n+000030f0: 2020 2020 2020 2020 3c2f 6578 6563 7574          </execut\n+00003100: 696f 6e3e 0a20 2020 2020 2020 2020 2020  ion>.           \n+00003110: 2020 2020 203c 2f65 7865 6375 7469 6f6e       </execution\n+00003120: 733e 0a20 2020 2020 2020 2020 2020 203c  s>.            <\n+00003130: 2f70 6c75 6769 6e3e 0a20 2020 2020 2020  /plugin>.       \n+00003140: 2020 2020 203c 706c 7567 696e 3e0a 2020       <plugin>.  \n+00003150: 2020 2020 2020 2020 2020 2020 2020 3c67                <g\n+00003160: 726f 7570 4964 3e6f 7267 2e73 6f6e 6174  roupId>org.sonat\n+00003170: 7970 652e 706c 7567 696e 733c 2f67 726f  ype.plugins</gro\n+00003180: 7570 4964 3e0a 2020 2020 2020 2020 2020  upId>.          \n+00003190: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n+000031a0: 643e 6e65 7875 732d 7374 6167 696e 672d  d>nexus-staging-\n+000031b0: 6d61 7665 6e2d 706c 7567 696e 3c2f 6172  maven-plugin</ar\n+000031c0: 7469 6661 6374 4964 3e0a 2020 2020 2020  tifactId>.      \n+000031d0: 2020 2020 2020 2020 2020 3c76 6572 7369            <versi\n+000031e0: 6f6e 3e31 2e36 2e38 3c2f 7665 7273 696f  on>1.6.8</versio\n+000031f0: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00003200: 2020 203c 6578 7465 6e73 696f 6e73 3e74     <extensions>t\n+00003210: 7275 653c 2f65 7874 656e 7369 6f6e 733e  rue</extensions>\n+00003220: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00003230: 203c 636f 6e66 6967 7572 6174 696f 6e3e   <configuration>\n+00003240: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00003250: 2020 2020 203c 7365 7276 6572 4964 3e6f       <serverId>o\n+00003260: 7373 7268 3c2f 7365 7276 6572 4964 3e0a  ssrh</serverId>.\n+00003270: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00003280: 2020 2020 3c6e 6578 7573 5572 6c3e 6874      <nexusUrl>ht\n+00003290: 7470 733a 2f2f 6f73 732e 736f 6e61 7479  tps://oss.sonaty\n+000032a0: 7065 2e6f 7267 2f3c 2f6e 6578 7573 5572  pe.org/</nexusUr\n+000032b0: 6c3e 0a20 2020 2020 2020 2020 2020 2020  l>.             \n+000032c0: 2020 203c 2f63 6f6e 6669 6775 7261 7469     </configurati\n+000032d0: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+000032e0: 3c2f 706c 7567 696e 3e0a 2020 2020 2020  </plugin>.      \n+000032f0: 2020 3c2f 706c 7567 696e 733e 0a20 2020    </plugins>.   \n+00003300: 203c 2f62 7569 6c64 3e0a 0a20 2020 203c   </build>..    <\n+00003310: 6465 7065 6e64 656e 6369 6573 3e0a 2020  dependencies>.  \n+00003320: 2020 2020 2020 3c64 6570 656e 6465 6e63        <dependenc\n+00003330: 793e 0a20 2020 2020 2020 2020 2020 203c  y>.            <\n+00003340: 6772 6f75 7049 643e 6f72 672e 6a75 6e69  groupId>org.juni\n+00003350: 742e 6a75 7069 7465 723c 2f67 726f 7570  t.jupiter</group\n+00003360: 4964 3e0a 2020 2020 2020 2020 2020 2020  Id>.            \n+00003370: 3c61 7274 6966 6163 7449 643e 6a75 6e69  <artifactId>juni\n+00003380: 742d 6a75 7069 7465 723c 2f61 7274 6966  t-jupiter</artif\n+00003390: 6163 7449 643e 0a20 2020 2020 2020 2020  actId>.         \n+000033a0: 2020 203c 7665 7273 696f 6e3e 352e 372e     <version>5.7.\n+000033b0: 303c 2f76 6572 7369 6f6e 3e0a 2020 2020  0</version>.    \n+000033c0: 2020 2020 2020 2020 3c73 636f 7065 3e74          <scope>t\n+000033d0: 6573 743c 2f73 636f 7065 3e0a 2020 2020  est</scope>.    \n+000033e0: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+000033f0: 3e0a 2020 2020 2020 2020 3c64 6570 656e  >.        <depen\n+00003400: 6465 6e63 793e 0a20 2020 2020 2020 2020  dency>.         \n+00003410: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00003420: 6a75 6e69 742e 6a75 7069 7465 723c 2f67  junit.jupiter</g\n+00003430: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00003440: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+00003450: 6a75 6e69 742d 6a75 7069 7465 722d 7061  junit-jupiter-pa\n+00003460: 7261 6d73 3c2f 6172 7469 6661 6374 4964  rams</artifactId\n+00003470: 3e0a 2020 2020 2020 2020 2020 2020 3c76  >.            <v\n+00003480: 6572 7369 6f6e 3e35 2e37 2e30 3c2f 7665  ersion>5.7.0</ve\n+00003490: 7273 696f 6e3e 0a20 2020 2020 2020 2020  rsion>.         \n+000034a0: 2020 203c 7363 6f70 653e 7465 7374 3c2f     <scope>test</\n+000034b0: 7363 6f70 653e 0a20 2020 2020 2020 203c  scope>.        <\n+000034c0: 2f64 6570 656e 6465 6e63 793e 0a20 2020  /dependency>.   \n+000034d0: 2020 2020 203c 6465 7065 6e64 656e 6379       <dependency\n+000034e0: 3e0a 2020 2020 2020 2020 2020 2020 3c67  >.            <g\n+000034f0: 726f 7570 4964 3e69 6e66 6f2e 7069 636f  roupId>info.pico\n+00003500: 636c 693c 2f67 726f 7570 4964 3e0a 2020  cli</groupId>.  \n+00003510: 2020 2020 2020 2020 2020 3c61 7274 6966            <artif\n+00003520: 6163 7449 643e 7069 636f 636c 692d 636f  actId>picocli-co\n+00003530: 6465 6765 6e3c 2f61 7274 6966 6163 7449  degen</artifactI\n+00003540: 643e 0a20 2020 2020 2020 2020 2020 203c  d>.            <\n+00003550: 7665 7273 696f 6e3e 342e 352e 323c 2f76  version>4.5.2</v\n+00003560: 6572 7369 6f6e 3e0a 2020 2020 2020 2020  ersion>.        \n+00003570: 2020 2020 3c73 636f 7065 3e74 6573 743c      <scope>test<\n+00003580: 2f73 636f 7065 3e0a 2020 2020 2020 2020  /scope>.        \n+00003590: 3c2f 6465 7065 6e64 656e 6379 3e0a 2020  </dependency>.  \n+000035a0: 2020 3c2f 6465 7065 6e64 656e 6369 6573    </dependencies\n+000035b0: 3e0a 0a20 2020 203c 7072 6f66 696c 6573  >..    <profiles\n+000035c0: 3e0a 2020 2020 2020 2020 3c70 726f 6669  >.        <profi\n+000035d0: 6c65 3e0a 2020 2020 2020 2020 2020 2020  le>.            \n+000035e0: 3c69 643e 6a64 6b31 352b 3c2f 6964 3e0a  <id>jdk15+</id>.\n+000035f0: 2020 2020 2020 2020 2020 2020 3c61 6374              <act\n+00003600: 6976 6174 696f 6e3e 0a20 2020 2020 2020  ivation>.       \n+00003610: 2020 2020 2020 2020 203c 6a64 6b3e 5b31           <jdk>[1\n+00003620: 352c 293c 2f6a 646b 3e0a 2020 2020 2020  5,)</jdk>.      \n+00003630: 2020 2020 2020 3c2f 6163 7469 7661 7469        </activati\n+00003640: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+00003650: 3c70 726f 7065 7274 6965 733e 0a20 2020  <properties>.   \n+00003660: 2020 2020 2020 2020 2020 2020 203c 6a64               <jd\n+00003670: 6b54 6172 6765 743e 312e 373c 2f6a 646b  kTarget>1.7</jdk\n+00003680: 5461 7267 6574 3e0a 2020 2020 2020 2020  Target>.        \n+00003690: 2020 2020 2020 2020 3c6a 6176 6164 6f63          <javadoc\n+000036a0: 536f 7572 6365 3e37 3c2f 6a61 7661 646f  Source>7</javado\n+000036b0: 6353 6f75 7263 653e 0a20 2020 2020 2020  cSource>.       \n+000036c0: 2020 2020 203c 2f70 726f 7065 7274 6965       </propertie\n+000036d0: 733e 0a20 2020 2020 2020 203c 2f70 726f  s>.        </pro\n+000036e0: 6669 6c65 3e0a 2020 2020 3c2f 7072 6f66  file>.    </prof\n+000036f0: 696c 6573 3e0a 0a3c 2f70 726f 6a65 6374  iles>..</project\n+00003700: 3e0a                                     >.\n"}]}
